首页/数据/数据工程与 ETL 速查/消息 Key 与分区路由
Kafka64 条

消息 Key 与分区路由

带 key 的消息按 murmur2(key) % 分区数 选择分区,同 key 始终落同一分区从而保序;无 key 时按可用分区轮询(粘性分区会先填满一批再切换)。

带 key哈希取模,同 key 同分区,顺序有保证
无 key轮询/粘性分发,吞吐均衡但不保序
注意分区数变化会改变 key 到分区的映射

带 key 生产(控制台)

带 key 生产(控制台)
kafka-console-producer.sh --bootstrap-server localhost:9092 \
  --topic orders \
  --property parse.key=true \
  --property key.separator=:
# 输入:order-1001:{"amount": 9.9}
对同一业务键要求严格有序时,分区数扩容会打散既有映射;已按 key 依赖顺序的链路要评估重排影响。

易错点

  • key 为 null 与空字符串的行为不同:null 走轮询逻辑,空串仍参与哈希
  • 自定义分区器要实现与旧版兼容的接口,升级客户端时注意废弃 API

数据来源与参考

  • Apache Kafka 官方文档:Producer Configs(partitioner.class)与 DefaultPartitioner
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌