卡夫卡主题创作最佳实践

时间:2018-01-29 09:51:59

标签: apache-kafka


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

我有一个基于docker的Kafka安装,它已被多个应用程序使用。如何将每个应用程序的主题创建与Kafka容器的启动分开?看看Confluents音乐演示他们通过旋转一个新的kafka图像来创建主题,调用" create-topic-script"然后让容器死掉。这让人感到很高兴" hacky"但maby是唯一的方法吗?

此致

2 个答案:

答案 0 :(得分:8)

  

在为Apache Kafka创建主题时,什么是最佳实践?   每个人都允许自动创建主题,或者您是如何做到的?

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

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

  

我也想指出,强烈建议不要这样做   为Streams使用auto topic create,但要手动创建所有   在启动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的init脚本。如果您使用的是Kubernetes,则可以使用Kubernetes Init Container。但显然有很多方法可以做到这一点。

  

这让人觉得“hacky”,但maby是唯一的方式吗?

我认为这不是hacky。我认为,使用init步骤很正常。

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

答案 1 :(得分:2)

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

  • 将属性auto.create.topics.enable设置为true(默认情况下应该是),然后在向代理发布值时创建主题。然后,请务必检查以下属性: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>