我是Apache Kafka的新手并正在玩它。如果我有2个经纪人和一个带有4个分区的主题并假设我的一个经纪人负载很重,那么kafka会负责平衡从生产者到其他免费经纪人的传入流量吗?如果是这样的话怎么办?
答案 0 :(得分:3)
如果您有多个分区,则生产者负责/选择要将其发送到哪个分区。
生产者将数据发布到他们选择的主题。生产者负责选择将哪个消息分配给主题中的哪个分区。这可以通过循环方式完成,只是为了平衡负载,或者可以根据一些语义分区功能(例如基于消息中的某些键)来完成。 link
在Kafka生产者中,可以指定分区键以指示消息的目标分区。默认情况下,基于散列的分区程序用于确定给定密钥的分区ID,人们也可以使用自定义分区程序。要减少打开套接字的数量,在0.8.0(https://issues.apache.org/jira/browse/KAFKA-1017)中,当未指定分区键或为null时,生产者将选择一个随机分区并坚持一段时间(默认为10分钟)切换到另一个。 link
如果您指定要将数据放入哪个分区,则它将始终进入该特定分区。如果您未指定,则生产者可以将其发送到任何分区。 Kafka代理从不在内部移动或平衡消息/分区。
我认为这个决定是为Kafka分区中的消息排序提供某些guarantees。
答案 1 :(得分:3)
Kafka制作人倾向于在所有分区之间平均分发消息,除非您覆盖此行为,然后您需要查看这四个分区是否在代理之间均匀分配。
这取决于你是什么意思"其中一个经纪人负担过重" 。如果是因为该主题或该集群有任何其他主题(例如__consumer_offset)。
您可以选择使用Kafka的cli工具或使用yahoo kafka-manager等某种UI的分区所在的代理。