【问题标题】:Will Kafka allow "unballanced" partitions?Kafka 会允许“不平衡”分区吗?
【发布时间】:2021-09-02 05:44:46
【问题描述】:
系统设计时提出的一个问题,如果选择消息键的方式在数据流中过于频繁,是否意味着只有一个主题分区会独占接收这些消息甚至 如果这会导致分区填充数据的方式不平衡?
Kafka 是否有一种机制可以在多个分区之间“拆分”具有相同键的消息,在这种情况下会牺牲顺序?
或者key -> partition 分配中没有例外,不管它如何影响分区的大小?
【问题讨论】:
标签:
apache-kafka
architecture
system-design
【解决方案1】:
在题目中回答你的问题,答案是肯定的,kafka会允许不平衡的分区。
您可以定义自己的分区器类来决定将消息发送到哪里,在默认架构中,它使用 murmur2 算法来决定将每个密钥发送到哪里,因此如果您的用例将在同一分区中具有相同的密钥不需要在您可能根本不需要发送密钥的事件之间进行排序,并且消息将分布在分区之间,在最后更新中,从生产者发送到同一分区的 kafka“批处理”消息具有更好的吞吐量......
明确一点,kafka 不需要你发送消息的密钥