【问题标题】:Kafka topic creation best-practiceKafka 主题创建最佳实践
【发布时间】:2018-07-07 23:31:59
【问题描述】:


在为 Apache Kafka 创建主题时,什么被认为是最佳实践?
每个人都允许自动创建主题吗?或者您是如何做到的?您是否将主题创建步骤与 kafka-instance 的开始捆绑在一起?

我有一个基于 docker 的 Kafka 安装,已被多个应用程序使用。如何将每个应用程序的主题创建与 Kafka 容器的启动分开?看看 Confluents music-demo,他们通过旋转一个新的 kafka-image 创建主题,调用“create-topic-script”,然后让容器死掉。这感觉有点“hacky”,但可能是唯一的方法?

问候

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    在为 Apache Kafka 创建主题时,什么被认为是最佳实践? 每个人都允许自动创建主题吗?或者你是怎么做的?

    这取决于你在做什么。您绝对可以使用主题自动创建,但是自动创建的主题将在分区和复制因子方面具有默认的代理范围配置。

    对于 Kafka Streams,建议使用 Confluent engineer writes 在启动应用程序之前手动创建主题:

    我还想指出,强烈建议不要 对 Streams 使用自动主题创建,但要手动创建所有 启动 Streams 应用程序之前的输入/输出主题。

    有关详细信息,请参阅 http://docs.confluent.io/current/streams/developer-guide.html#managing-topics-of-a-kafka-streams-application

    关于:

    您是否将主题创建步骤与 kafka-instance 的开始捆绑在一起?

    是的。如果您有 Java 应用程序,则可以在启动应用程序之前在应用程序的 main 方法中使用 AdminClient。如果您有其他类型的应用程序,您可以在应用程序之前运行一个调用bin/kafka-topics.sh 的初始化脚本。如果您使用的是 Kubernetes,则可以使用 Kubernetes Init Container。但显然有很多方法可以做到这一点。

    这感觉有点“hacky”,但可能是唯一的方法?

    我不认为这是 hacky。我认为有初始化步骤很正常。

    最后,还请注意,您可能需要为您的主题配置保留政策。这可以通过代理范围的默认值或基于每个主题来完成:https://stackoverflow.com/a/48504305/741970

    【讨论】:

    • 感谢您的出色回答。目前它使用bin/kafka-topics.sh 工作,也许我只需要习惯这个想法。我一定会使用AdminClient 来研究脚本。
    【解决方案2】:

    您有两种方法来创建 Kafka 主题,每种方法都取决于您的需求:

    • 将属性auto.create.topics.enable设置为true(默认应该是),然后当一个值发布到broker时就会创建topic。然后一定要检查以下属性:default.replication.factor 用于创建主题的默认副本数,num.partitions 用于默认分区数
    • 使用随 Kafka 提供的实用程序手动创建主题。

    这是手动创建主题的官方方式:

    bin/kafka-topics.sh --create --zookeeper <your_zookeeper_host>:2181 --replication-factor <number_of_replicas> --partitions <number_of_partitions> --topic <name_of_your_topic>
    

    【讨论】:

    • 是的,这些也是我确定的选项。问题主要是使用哪一个。但正如你所说,这可能归结为需求。 @Dimitry 还指出了使用AdminClient的可能性,我将对此进行研究。
    【解决方案3】:

    管理主题的另一种选择是采用声明性的 git-ops 方法。这将主题管理与应用程序的运行时完全分开。这是否构成“最佳实践”,我认为取决于具体情况。对于某些用例/团队,这可以很好地工作。

    有关支持此方法的工具,请参阅以下问题/答案。

    How to declaratively manage Kafka topics?

    【讨论】:

      猜你喜欢
      • 2021-01-16
      • 2017-09-29
      • 2011-04-09
      • 2018-09-15
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多