当前位置: 首页 > 知识库问答 >
问题:

Kafka主题创作最佳实践

冯峻
2023-03-14


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

我有一个基于docker的Kafka安装,它已经被多个应用程序使用了。如何将每个应用程序的主题创建与Kafka容器的启动分开?。在Confluents音乐演示中,他们通过旋转一个新的Kafka图像来创建主题,调用“创建主题脚本”,然后让容器消亡。这感觉有点“黑客”,但也许这是唯一的方法<问候

共有3个答案

微生新翰
2023-03-14

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

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

如何以声明方式管理Kafka主题?

饶骁
2023-03-14

创建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>
桑坚
2023-03-14

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

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

对于Kafka Streams,合流工程师写道,建议在启动应用程序之前手动创建主题:

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

有关更多详细信息,请参阅http://docs.confluent.io/current/streams/developer-guide.html#managing-kafka-streams-application主题

关于:

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

对如果您有一个Java应用程序,您可以在启动应用程序之前在应用程序的main方法中使用AdminClient。如果您有其他类型的应用程序,您可以运行一个init脚本来调用bin/kafka主题。在申请之前。如果您使用的是Kubernetes,那么可以使用Kubernetes Init容器。但显然有很多方法可以做到这一点。

这感觉有点“黑客”,但也许这是唯一的方法?

我不认为这是骇客。我认为有init步骤是很正常的。

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

 类似资料:
  • 我使用的是Debezium,它制作了Kafka Connect。Kafka Connect公开了几个需要创建的主题: OFFSET_STORAGE_TOPIC运行Kafka Connect服务时需要此环境变量。将此设置为Kafka主题的名称,其中Kafka Connect服务组存储连接器偏移。主题应该有许多分区,高度重复(例如,3倍或更多),并且应该为压缩进行配置。 STATUS_STORAGE_

  • 我使用了一个Kafka主题,它也是我应用程序中的元数据。我从zookeeper shell中硬删除了该主题,方法是删除与该主题相对应的目录。再次创建话题后,我描述了话题,发现这个新创建的话题还没有分配领导。在consumer中,我可以看到重复的日志打印。为什么我做错了什么?或者,是否有一种方法可以删除与Kafka主题相关的元数据,而我并不知道?提前道谢!

  • 我有一个关于主题偏移在Kafka中是如何工作的问题,它们是否存储在Kafka中的B树状结构? 我要求它的具体原因,让我们说我有一个主题,在主题中有1000万条记录,这将意味着1000万偏移,如果没有发生压缩或关闭,现在如果我使用consumer.seek(5000000),它将像LinkList的意思是,它将转到0偏移量,并尝试从那里跳到第500000个偏移量,或者它确实有类似索引的结构,可以准确

  • 问题内容: 我刚开始学习Go,并通读现有代码以学习“其他人的做法”。在这种情况下,遍历使用go“工作区”,尤其是与项目依赖关系有关的地方。 在处理各种Go项目时,使用一个或多个Go工作区(即$ GOPATH的定义)的常见(或存在)最佳实践是什么?我应该期望有一个类似于我所有项目的中央代码存储库的Go工作区,还是在我处理这些项目时都明确将其分解并设置$ GOPATH(有点像python) virtu

  • 我试图使用Java API将发送到,因为从开始,他们建议使用Java API而不是Scala API来获得更好的性能。 http://kafka.apache.org/090/documentation.html#ProducerAPI 我的XML文件有大约,我可以使用什么XML API来读取XML文件并转换为字符串,然后将该字符串发送到Kafka主题。 或者,我可以将XML转换为数据并将其发送给

  • 本文向大家介绍ThreadPoolExecutor 创建方法最佳实践?相关面试题,主要包含被问及ThreadPoolExecutor 创建方法最佳实践?时的应答技巧和注意事项,需要的朋友参考一下 在《阿里巴巴 Java 开发手册》“并发处理”这一章节,明确指出线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。 为什么呢? 使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开