Kafka将主题存储在多节点群集中的哪个位置?

时间:2015-12-11 11:39:39

标签: java apache-kafka

我有一个3节点Kafka集群,我使用以下命令在其中一个节点中创建一个主题: bin / kafka-create-topic.sh --zookeeper host1.com:2181,host2.com:2181,host3.com:2181 --replica 1 --partition 1 --topic test

所以,现在当我将消息推送到主题时,我的一个主机正在使主题消息过载,因为Kafka将消息存储在磁盘空间中。我想知道是否有任何配置要在集群中分配存储过程。

谢谢,

2 个答案:

答案 0 :(得分:2)

正如@ om-nom-nom指出的那样,您正在使用单个分区创建主题。因此该主题将仅在您创建它的节点上。因此,即使您有3节点设置,也永远不会使用其他两个节点。

更改主题以使用多个分区是您分发Kafka主题的方式。 Kafka经纪人不会将消息分发到不同的节点。生产者有责任确定消息所在的分区。这是你可以确定的,或者让生产者使用循环法分发到分区,正如@ om-nom-nom指出的那样。

  

在Kafka生产者中,可以指定分区键以指示消息的目标分区。默认情况下,使用基于散列的分区程序来确定给定密钥的分区ID,人们也可以使用自定义分区程序。

     

要减少打开套接字的数量,在0.8.0(https://issues.apache.org/jira/browse/KAFKA-1017)中,当未指定分区键或为null时,生产者将选择一个随机分区并坚持一段时间(默认值为10)在切换到另一个之前。)   source

答案 1 :(得分:1)

主题可以分为多个分区(您的配置仅使用1个),默认情况下将以循环方式在代理之间分配。