首页 文章

如何在apache kafka中创建主题?

提问于
浏览
9

在 Kafka 创建主题的最佳途径是什么?

  • 创建主题时要定义多少副本/分区?

在新的 生产环境 者API中,当我尝试将消息发布到不存在的主题时,它首次失败然后成功发布 .

  • 我想知道,副本,分区和集群节点数之间的关系 .

  • 我们是否需要在发布消息之前创建主题?

4 回答

  • 15

    启动Kafka代理时,可以在 conf/server.properties 文件中定义属性集 . 此文件只是键值属性文件 . 其中一个属性是 auto.create.topics.enable ,如果它设置为true(默认情况下),当您向不存在的主题发送消息时,Kafka将自动创建主题 .

    您可以找到的所有配置选项都定义为here . 恕我直言,创建主题的简单规则如下:副本的数量必须不小于您拥有的节点数 . 主题数必须是群集中节点数的乘数,例如:

    • 您有9个节点集群

    • 您的主题必须有9个分区和9个副本或18个分区和9个副本或36个分区和9个副本等等...

  • 18

    分区编号确定主题的 parallelism ,因为一个分区只能由使用者组中的一个使用者使用 . 例如,如果一个主题只有10个分区,而消费者组中只有20个消费者,则10个消费者处于空闲状态,没有收到任何消息 . 这个数字真的取决于你的申请,但1-1000s都是合理的 .

    副本号由您的耐久性要求决定 . 对于具有复制因子N的主题,Kafka可以容忍最多N-1个服务器故障,而不会丢失任何提交给日志的消息 . 3个副本是常见配置 . 当然,副本号必须小于或等于您的经纪人号码 .

    当Kafka在服务器上自动创建主题时, auto.create.topics.enable 属性控制 . 如果将此设置为true,则当应用程序尝试生成,使用或获取不存在的主题的元数据时,Kafka将自动使用默认复制因子和分区数创建主题 . 我建议在 生产环境 中关闭它并提前创建主题 .

  • 1

    在server.properties文件中设置属性 auto.create.topics.enable=true ,如果有多个代理对所有服务器* .properties文件执行相同操作,请重新启动kafka-server . 但请确保在服务器* .properties num.partitions=int 中为相应的数字设置分区,否则如果稍后增加分区,则会出现性能问题 .

  • 1

    Kafka的基本并行度是分区 . 在 生产环境 者和代理端,对不同分区的写入可以完全并行完成 .

    要记住的事情

    • 更多分区需要更多打开文件句柄

    • 更多分区可能会增加不可用性

    • 更多分区可能会增加端到端延迟

    根据经验,将每个代理的分区数限制为 100 x b x r 可能是个好主意,其中 b 是代理的数量, r 是复制因子 .

    例如:如果群集中有9个代理/节点,则主题可能有

    • 1800个包含3个副本的分区,或

    • 900个分区和2个副本


    EDIT: 有关详细信息,请参阅文章How to choose the number of topics/partitions in a Kafka cluster?(已从中获取答案)

相关问题