我有一个3节点的kafka集群,我正在其中一个节点中使用以下命令创建一个主题:bin/kafka-create-topic.sh--zookeeper host1。com:2181,主机2。com:2181,主机3。com:2181 --replica 1--分区1--主题测试
所以,现在当我将消息推送到主题时,我的一个主机被主题消息过载,因为kafka将消息存储在磁盘空间中。我想知道是否有任何配置可以设置为跨集群分发存储进程。
谢谢,
我有一个3节点的kafka集群,我正在其中一个节点中使用以下命令创建一个主题:bin/kafka-create-topic.sh--zookeeper host1。com:2181,主机2。com:2181,主机3。com:2181 --replica 1--分区1--主题测试
所以,现在当我将消息推送到主题时,我的一个主机被主题消息过载,因为kafka将消息存储在磁盘空间中。我想知道是否有任何配置可以设置为跨集群分发存储进程。
谢谢,
2条答案
按热度按时间z4iuyo4d1#
正如@om nom指出的,您正在创建一个具有单个分区的主题。因此,该主题将只出现在创建它的节点上。因此,即使您有一个3节点的设置,其他两个节点将永远不会被使用。
将主题更改为使用多个分区是分发Kafka主题的方式。kafka代理不会将消息分发到不同的节点。生产者的责任是确定消息要发送到哪个分区。这是您可以确定的,或者让生产者使用循环方法来分发到分区,正如@om nom指出的那样。
在kafka producer中,可以指定一个分区键来指示消息的目标分区。默认情况下,使用基于散列的分区器来确定给定密钥的分区id,人们也可以使用自定义分区器。
减少开口插座的#,单位为0.8.0(https://issues.apache.org/jira/browse/kafka-1017),当分区键未指定或为空时,生产者将选择一个随机分区并在切换到另一个分区之前将其保留一段时间(默认值为10分钟)。
来源
zsohkypk2#
主题可以分为多个分区(您的配置仅使用1个分区),默认情况下,这些分区将以循环方式在代理之间分发。