# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['TopicArgs', 'Topic']

@pulumi.input_type
class TopicArgs:
    def __init__(__self__, *,
                 instance_id: pulumi.Input[builtins.str],
                 partition_number: pulumi.Input[builtins.int],
                 topic_name: pulumi.Input[builtins.str],
                 access_policies: Optional[pulumi.Input[Sequence[pulumi.Input['TopicAccessPolicyArgs']]]] = None,
                 all_authority: Optional[pulumi.Input[builtins.bool]] = None,
                 cleanup_policies: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 parameters: Optional[pulumi.Input[builtins.str]] = None,
                 replica_number: Optional[pulumi.Input[builtins.int]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['TopicTagArgs']]]] = None):
        """
        The set of arguments for constructing a Topic resource.
        :param pulumi.Input[builtins.str] instance_id: 实例 ID。
        :param pulumi.Input[builtins.int] partition_number: Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        :param pulumi.Input[builtins.str] topic_name: 待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        :param pulumi.Input[builtins.bool] all_authority: 待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] cleanup_policies: Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        :param pulumi.Input[builtins.str] description: Topic 的描述信息。长度不超过 128 个字符。
        :param pulumi.Input[builtins.str] parameters: Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        :param pulumi.Input[builtins.int] replica_number: Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        """
        pulumi.set(__self__, "instance_id", instance_id)
        pulumi.set(__self__, "partition_number", partition_number)
        pulumi.set(__self__, "topic_name", topic_name)
        if access_policies is not None:
            pulumi.set(__self__, "access_policies", access_policies)
        if all_authority is not None:
            pulumi.set(__self__, "all_authority", all_authority)
        if cleanup_policies is not None:
            pulumi.set(__self__, "cleanup_policies", cleanup_policies)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)
        if replica_number is not None:
            pulumi.set(__self__, "replica_number", replica_number)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> pulumi.Input[builtins.str]:
        """
        实例 ID。
        """
        return pulumi.get(self, "instance_id")

    @instance_id.setter
    def instance_id(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "instance_id", value)

    @property
    @pulumi.getter(name="partitionNumber")
    def partition_number(self) -> pulumi.Input[builtins.int]:
        """
        Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        """
        return pulumi.get(self, "partition_number")

    @partition_number.setter
    def partition_number(self, value: pulumi.Input[builtins.int]):
        pulumi.set(self, "partition_number", value)

    @property
    @pulumi.getter(name="topicName")
    def topic_name(self) -> pulumi.Input[builtins.str]:
        """
        待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        """
        return pulumi.get(self, "topic_name")

    @topic_name.setter
    def topic_name(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "topic_name", value)

    @property
    @pulumi.getter(name="accessPolicies")
    def access_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TopicAccessPolicyArgs']]]]:
        return pulumi.get(self, "access_policies")

    @access_policies.setter
    def access_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TopicAccessPolicyArgs']]]]):
        pulumi.set(self, "access_policies", value)

    @property
    @pulumi.getter(name="allAuthority")
    def all_authority(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        """
        return pulumi.get(self, "all_authority")

    @all_authority.setter
    def all_authority(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "all_authority", value)

    @property
    @pulumi.getter(name="cleanupPolicies")
    def cleanup_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        """
        return pulumi.get(self, "cleanup_policies")

    @cleanup_policies.setter
    def cleanup_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "cleanup_policies", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Topic 的描述信息。长度不超过 128 个字符。
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "parameters", value)

    @property
    @pulumi.getter(name="replicaNumber")
    def replica_number(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        """
        return pulumi.get(self, "replica_number")

    @replica_number.setter
    def replica_number(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "replica_number", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TopicTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TopicTagArgs']]]]):
        pulumi.set(self, "tags", value)


@pulumi.input_type
class _TopicState:
    def __init__(__self__, *,
                 access_policies: Optional[pulumi.Input[Sequence[pulumi.Input['TopicAccessPolicyArgs']]]] = None,
                 all_authority: Optional[pulumi.Input[builtins.bool]] = None,
                 cleanup_policies: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 created_time: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 instance_id: Optional[pulumi.Input[builtins.str]] = None,
                 log_retention_hours: Optional[pulumi.Input[builtins.int]] = None,
                 parameters: Optional[pulumi.Input[builtins.str]] = None,
                 partition_number: Optional[pulumi.Input[builtins.int]] = None,
                 replica_number: Optional[pulumi.Input[builtins.int]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['TopicTagArgs']]]] = None,
                 topic_name: Optional[pulumi.Input[builtins.str]] = None,
                 used_storage_percentage_in_instance: Optional[pulumi.Input[builtins.float]] = None,
                 used_storage_space_in_bytes: Optional[pulumi.Input[builtins.int]] = None):
        """
        Input properties used for looking up and filtering Topic resources.
        :param pulumi.Input[builtins.bool] all_authority: 待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] cleanup_policies: Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        :param pulumi.Input[builtins.str] created_time: Topic 的创建时间。
        :param pulumi.Input[builtins.str] description: Topic 的描述信息。长度不超过 128 个字符。
        :param pulumi.Input[builtins.str] instance_id: 实例 ID。
        :param pulumi.Input[builtins.int] log_retention_hours: 消息保留时长，单位小时。Topic维度的消息保留时长，取值范围：1   - 2160小时（90天）。
        :param pulumi.Input[builtins.str] parameters: Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        :param pulumi.Input[builtins.int] partition_number: Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        :param pulumi.Input[builtins.int] replica_number: Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        :param pulumi.Input[builtins.str] status: Topic 的状态。
        :param pulumi.Input[builtins.str] topic_name: 待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        :param pulumi.Input[builtins.float] used_storage_percentage_in_instance: 当前 Topic 总数据量占实例总存储空间的比例，控制台页面显示为保留两位小数的百分数。
        :param pulumi.Input[builtins.int] used_storage_space_in_bytes: 当前 Topic 已使用的总存储空间大小。
        """
        if access_policies is not None:
            pulumi.set(__self__, "access_policies", access_policies)
        if all_authority is not None:
            pulumi.set(__self__, "all_authority", all_authority)
        if cleanup_policies is not None:
            pulumi.set(__self__, "cleanup_policies", cleanup_policies)
        if created_time is not None:
            pulumi.set(__self__, "created_time", created_time)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if instance_id is not None:
            pulumi.set(__self__, "instance_id", instance_id)
        if log_retention_hours is not None:
            pulumi.set(__self__, "log_retention_hours", log_retention_hours)
        if parameters is not None:
            pulumi.set(__self__, "parameters", parameters)
        if partition_number is not None:
            pulumi.set(__self__, "partition_number", partition_number)
        if replica_number is not None:
            pulumi.set(__self__, "replica_number", replica_number)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if topic_name is not None:
            pulumi.set(__self__, "topic_name", topic_name)
        if used_storage_percentage_in_instance is not None:
            pulumi.set(__self__, "used_storage_percentage_in_instance", used_storage_percentage_in_instance)
        if used_storage_space_in_bytes is not None:
            pulumi.set(__self__, "used_storage_space_in_bytes", used_storage_space_in_bytes)

    @property
    @pulumi.getter(name="accessPolicies")
    def access_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TopicAccessPolicyArgs']]]]:
        return pulumi.get(self, "access_policies")

    @access_policies.setter
    def access_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TopicAccessPolicyArgs']]]]):
        pulumi.set(self, "access_policies", value)

    @property
    @pulumi.getter(name="allAuthority")
    def all_authority(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        """
        return pulumi.get(self, "all_authority")

    @all_authority.setter
    def all_authority(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "all_authority", value)

    @property
    @pulumi.getter(name="cleanupPolicies")
    def cleanup_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        """
        return pulumi.get(self, "cleanup_policies")

    @cleanup_policies.setter
    def cleanup_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "cleanup_policies", value)

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Topic 的创建时间。
        """
        return pulumi.get(self, "created_time")

    @created_time.setter
    def created_time(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "created_time", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Topic 的描述信息。长度不超过 128 个字符。
        """
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例 ID。
        """
        return pulumi.get(self, "instance_id")

    @instance_id.setter
    def instance_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "instance_id", value)

    @property
    @pulumi.getter(name="logRetentionHours")
    def log_retention_hours(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        消息保留时长，单位小时。Topic维度的消息保留时长，取值范围：1   - 2160小时（90天）。
        """
        return pulumi.get(self, "log_retention_hours")

    @log_retention_hours.setter
    def log_retention_hours(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "log_retention_hours", value)

    @property
    @pulumi.getter
    def parameters(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        """
        return pulumi.get(self, "parameters")

    @parameters.setter
    def parameters(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "parameters", value)

    @property
    @pulumi.getter(name="partitionNumber")
    def partition_number(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        """
        return pulumi.get(self, "partition_number")

    @partition_number.setter
    def partition_number(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "partition_number", value)

    @property
    @pulumi.getter(name="replicaNumber")
    def replica_number(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        """
        return pulumi.get(self, "replica_number")

    @replica_number.setter
    def replica_number(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "replica_number", value)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        Topic 的状态。
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "status", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TopicTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TopicTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="topicName")
    def topic_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        """
        return pulumi.get(self, "topic_name")

    @topic_name.setter
    def topic_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "topic_name", value)

    @property
    @pulumi.getter(name="usedStoragePercentageInInstance")
    def used_storage_percentage_in_instance(self) -> Optional[pulumi.Input[builtins.float]]:
        """
        当前 Topic 总数据量占实例总存储空间的比例，控制台页面显示为保留两位小数的百分数。
        """
        return pulumi.get(self, "used_storage_percentage_in_instance")

    @used_storage_percentage_in_instance.setter
    def used_storage_percentage_in_instance(self, value: Optional[pulumi.Input[builtins.float]]):
        pulumi.set(self, "used_storage_percentage_in_instance", value)

    @property
    @pulumi.getter(name="usedStorageSpaceInBytes")
    def used_storage_space_in_bytes(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        当前 Topic 已使用的总存储空间大小。
        """
        return pulumi.get(self, "used_storage_space_in_bytes")

    @used_storage_space_in_bytes.setter
    def used_storage_space_in_bytes(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "used_storage_space_in_bytes", value)


@pulumi.type_token("bytepluscc:kafka/topic:Topic")
class Topic(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 access_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TopicAccessPolicyArgs', 'TopicAccessPolicyArgsDict']]]]] = None,
                 all_authority: Optional[pulumi.Input[builtins.bool]] = None,
                 cleanup_policies: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 instance_id: Optional[pulumi.Input[builtins.str]] = None,
                 parameters: Optional[pulumi.Input[builtins.str]] = None,
                 partition_number: Optional[pulumi.Input[builtins.int]] = None,
                 replica_number: Optional[pulumi.Input[builtins.int]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TopicTagArgs', 'TopicTagArgsDict']]]]] = None,
                 topic_name: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        """
        Topic即消息的主题，用于分类消息。支持 Topic 级别的资源管理，即 Topic 的创建、查看与删除等操作。

        ## Import

        ```sh
        $ pulumi import bytepluscc:kafka/topic:Topic example "instance_id|topic_name"
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.bool] all_authority: 待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] cleanup_policies: Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        :param pulumi.Input[builtins.str] description: Topic 的描述信息。长度不超过 128 个字符。
        :param pulumi.Input[builtins.str] instance_id: 实例 ID。
        :param pulumi.Input[builtins.str] parameters: Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        :param pulumi.Input[builtins.int] partition_number: Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        :param pulumi.Input[builtins.int] replica_number: Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        :param pulumi.Input[builtins.str] topic_name: 待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: TopicArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Topic即消息的主题，用于分类消息。支持 Topic 级别的资源管理，即 Topic 的创建、查看与删除等操作。

        ## Import

        ```sh
        $ pulumi import bytepluscc:kafka/topic:Topic example "instance_id|topic_name"
        ```

        :param str resource_name: The name of the resource.
        :param TopicArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(TopicArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 access_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TopicAccessPolicyArgs', 'TopicAccessPolicyArgsDict']]]]] = None,
                 all_authority: Optional[pulumi.Input[builtins.bool]] = None,
                 cleanup_policies: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 instance_id: Optional[pulumi.Input[builtins.str]] = None,
                 parameters: Optional[pulumi.Input[builtins.str]] = None,
                 partition_number: Optional[pulumi.Input[builtins.int]] = None,
                 replica_number: Optional[pulumi.Input[builtins.int]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TopicTagArgs', 'TopicTagArgsDict']]]]] = None,
                 topic_name: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = TopicArgs.__new__(TopicArgs)

            __props__.__dict__["access_policies"] = access_policies
            __props__.__dict__["all_authority"] = all_authority
            __props__.__dict__["cleanup_policies"] = cleanup_policies
            __props__.__dict__["description"] = description
            if instance_id is None and not opts.urn:
                raise TypeError("Missing required property 'instance_id'")
            __props__.__dict__["instance_id"] = instance_id
            __props__.__dict__["parameters"] = parameters
            if partition_number is None and not opts.urn:
                raise TypeError("Missing required property 'partition_number'")
            __props__.__dict__["partition_number"] = partition_number
            __props__.__dict__["replica_number"] = replica_number
            __props__.__dict__["tags"] = tags
            if topic_name is None and not opts.urn:
                raise TypeError("Missing required property 'topic_name'")
            __props__.__dict__["topic_name"] = topic_name
            __props__.__dict__["created_time"] = None
            __props__.__dict__["log_retention_hours"] = None
            __props__.__dict__["status"] = None
            __props__.__dict__["used_storage_percentage_in_instance"] = None
            __props__.__dict__["used_storage_space_in_bytes"] = None
        super(Topic, __self__).__init__(
            'bytepluscc:kafka/topic:Topic',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            access_policies: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TopicAccessPolicyArgs', 'TopicAccessPolicyArgsDict']]]]] = None,
            all_authority: Optional[pulumi.Input[builtins.bool]] = None,
            cleanup_policies: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
            created_time: Optional[pulumi.Input[builtins.str]] = None,
            description: Optional[pulumi.Input[builtins.str]] = None,
            instance_id: Optional[pulumi.Input[builtins.str]] = None,
            log_retention_hours: Optional[pulumi.Input[builtins.int]] = None,
            parameters: Optional[pulumi.Input[builtins.str]] = None,
            partition_number: Optional[pulumi.Input[builtins.int]] = None,
            replica_number: Optional[pulumi.Input[builtins.int]] = None,
            status: Optional[pulumi.Input[builtins.str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TopicTagArgs', 'TopicTagArgsDict']]]]] = None,
            topic_name: Optional[pulumi.Input[builtins.str]] = None,
            used_storage_percentage_in_instance: Optional[pulumi.Input[builtins.float]] = None,
            used_storage_space_in_bytes: Optional[pulumi.Input[builtins.int]] = None) -> 'Topic':
        """
        Get an existing Topic resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.bool] all_authority: 待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] cleanup_policies: Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        :param pulumi.Input[builtins.str] created_time: Topic 的创建时间。
        :param pulumi.Input[builtins.str] description: Topic 的描述信息。长度不超过 128 个字符。
        :param pulumi.Input[builtins.str] instance_id: 实例 ID。
        :param pulumi.Input[builtins.int] log_retention_hours: 消息保留时长，单位小时。Topic维度的消息保留时长，取值范围：1   - 2160小时（90天）。
        :param pulumi.Input[builtins.str] parameters: Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        :param pulumi.Input[builtins.int] partition_number: Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        :param pulumi.Input[builtins.int] replica_number: Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        :param pulumi.Input[builtins.str] status: Topic 的状态。
        :param pulumi.Input[builtins.str] topic_name: 待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        :param pulumi.Input[builtins.float] used_storage_percentage_in_instance: 当前 Topic 总数据量占实例总存储空间的比例，控制台页面显示为保留两位小数的百分数。
        :param pulumi.Input[builtins.int] used_storage_space_in_bytes: 当前 Topic 已使用的总存储空间大小。
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _TopicState.__new__(_TopicState)

        __props__.__dict__["access_policies"] = access_policies
        __props__.__dict__["all_authority"] = all_authority
        __props__.__dict__["cleanup_policies"] = cleanup_policies
        __props__.__dict__["created_time"] = created_time
        __props__.__dict__["description"] = description
        __props__.__dict__["instance_id"] = instance_id
        __props__.__dict__["log_retention_hours"] = log_retention_hours
        __props__.__dict__["parameters"] = parameters
        __props__.__dict__["partition_number"] = partition_number
        __props__.__dict__["replica_number"] = replica_number
        __props__.__dict__["status"] = status
        __props__.__dict__["tags"] = tags
        __props__.__dict__["topic_name"] = topic_name
        __props__.__dict__["used_storage_percentage_in_instance"] = used_storage_percentage_in_instance
        __props__.__dict__["used_storage_space_in_bytes"] = used_storage_space_in_bytes
        return Topic(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="accessPolicies")
    def access_policies(self) -> pulumi.Output[Sequence['outputs.TopicAccessPolicy']]:
        return pulumi.get(self, "access_policies")

    @property
    @pulumi.getter(name="allAuthority")
    def all_authority(self) -> pulumi.Output[builtins.bool]:
        """
        待创建的Topic默认是否对所有用户都开启读写权限。true：（默认）所有用户都具备此 Topic 的读写权限。false：并非所有用户都具备此 Topic 的读写权限。默认情况下，用户对于此 Topic 的权限沿用用户的默认权限，如果默认权限不满足需求，您也可以通过 AccessPolicies 指定某个用户对于此 Topic 的自定义权限。
        """
        return pulumi.get(self, "all_authority")

    @property
    @pulumi.getter(name="cleanupPolicies")
    def cleanup_policies(self) -> pulumi.Output[Sequence[builtins.str]]:
        """
        Topic 的消息清理策略，支持以下三种取值方式：[delete]：默认的消息清理策略。在磁盘容量充足的情况下，保留在最长保留时间范围内的消息；在磁盘容量不足时，将提前删除旧消息，以保证服务可用性。[compact]：COMPACT 消息清理策略针对每个消息的 Key 进行整合，对于有相同 Key 的消息，只保留最新的 value 值，旧的记录则会被清除。[delete,compact]：同时配置 DELETE 和 COMPACT 两种消息清理策略。只要消息满足任一条清理策略时，都将被清除。
        """
        return pulumi.get(self, "cleanup_policies")

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> pulumi.Output[builtins.str]:
        """
        Topic 的创建时间。
        """
        return pulumi.get(self, "created_time")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[builtins.str]:
        """
        Topic 的描述信息。长度不超过 128 个字符。
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> pulumi.Output[builtins.str]:
        """
        实例 ID。
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="logRetentionHours")
    def log_retention_hours(self) -> pulumi.Output[builtins.int]:
        """
        消息保留时长，单位小时。Topic维度的消息保留时长，取值范围：1   - 2160小时（90天）。
        """
        return pulumi.get(self, "log_retention_hours")

    @property
    @pulumi.getter
    def parameters(self) -> pulumi.Output[builtins.str]:
        """
        Topic 级别的参数配置。Parameters 参数说明 MinInsyncReplicaNumber:2：最小同步副本个数。当同步副本个数小于配置值时，消息将无法写入对应 Topic。配置值越大，数据可靠性增加，但是可用性将会降低。默认值为副本数减 1。考虑到 Topic 的可用性，建议设置为副本数减 1。MessageMaxByte:12：最大消息大小。单位为 MB，取值范围为 1～12。默认沿用实例的最大消息大小设置。LogRetentionHours:72：消息保留时长。单位为小时，取值范围为 0～2160，即消息最久保留 90 天。默认沿用实例的消息保留时长设置。
        """
        return pulumi.get(self, "parameters")

    @property
    @pulumi.getter(name="partitionNumber")
    def partition_number(self) -> pulumi.Output[builtins.int]:
        """
        Topic 分区数。取值范围为 1~300，如果实例中已创建了其他 Topic，则所有 Topic 的分区数之和不超过该实例的分区数上限。如果分区数无法满足业务需求，您可以购买更多分区，提升实例的分区数量上限。
        """
        return pulumi.get(self, "partition_number")

    @property
    @pulumi.getter(name="replicaNumber")
    def replica_number(self) -> pulumi.Output[builtins.int]:
        """
        Topic 副本个数。可设置为为 2 或 3，默认值为 3。
        """
        return pulumi.get(self, "replica_number")

    @property
    @pulumi.getter
    def status(self) -> pulumi.Output[builtins.str]:
        """
        Topic 的状态。
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Sequence['outputs.TopicTag']]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="topicName")
    def topic_name(self) -> pulumi.Output[builtins.str]:
        """
        待创建的 Topic 名称。3～64 个字符。必须以英文或数字开头。支持的字符包括英文、数字、连字符（-）、下划线（_）和英文句号（.）。
        """
        return pulumi.get(self, "topic_name")

    @property
    @pulumi.getter(name="usedStoragePercentageInInstance")
    def used_storage_percentage_in_instance(self) -> pulumi.Output[builtins.float]:
        """
        当前 Topic 总数据量占实例总存储空间的比例，控制台页面显示为保留两位小数的百分数。
        """
        return pulumi.get(self, "used_storage_percentage_in_instance")

    @property
    @pulumi.getter(name="usedStorageSpaceInBytes")
    def used_storage_space_in_bytes(self) -> pulumi.Output[builtins.int]:
        """
        当前 Topic 已使用的总存储空间大小。
        """
        return pulumi.get(self, "used_storage_space_in_bytes")

