我有一个包含3个代理的kafka集群和一个具有8个分区的主题。 使用Spring Boot用Java编写的生产者,没有用于负载平衡的自定义规则。这意味着它应该进行轮询。
问题是有些分区没有收到消息。我弄清楚了检查这4个使用者正在接收什么,甚至他们正在处理所有消息,由于该使用者仅接收到一条消息,所以始终有一个使用者处于空闲状态。
可能是什么问题? 我正在使用的Kafka版本是0.10.1.1 在这种情况下,请注意,我没有为分区使用副本
答案 0 :(得分:1)
这意味着它应该进行循环轮询。
如果您的Kafka邮件中没有keys
,它将仅进行循环轮询。否则,将根据密钥的哈希值对消息进行分区:
hash(key) % number_of_partitions
这并非不常见,这将导致某些分区完全不接收任何消息。设想一种情况,您使用的键只能具有两个不同的值。在这种情况下,所有数据将仅流入两个分区,而与主题中的分区数无关。