Kafka Streams:执行KTable-KTable外键连接的应用如何增加主题分区
Kafka Streams外键连接扩展性及分区扩容问题解答
1. 外键连接是否要求输入主题协同分区
- 外键连接不需要输入主题协同分区,和主键KTable-KTable连接强制要求两侧输入主题分区数相同、分区策略一致的规则不同,该特性在设计时就解除了协同分区的限制,内部会自动完成外键维度的请求路由,无需人为对齐两侧主题的分区配置。
2. 生产环境存量应用的输入主题分区扩容方案
操作流程
注意:Kafka主题仅支持增加分区,不支持减少分区,扩容前请确认新分区数符合长期业务规划。
- 通过Kafka自带的
kafka-topics.sh工具直接修改目标输入主题的分区数,参考命令:bin/kafka-topics.sh --alter --topic <输入主题名称> --partitions <新分区数> --bootstrap-server <Kafka集群地址> - 触发Kafka Streams应用重平衡:可滚动重启应用,或等待消费者组自动检测到分区数变更后自动触发重平衡即可。
对KTable状态存储与changelog主题的影响
- 存量分区对应的状态存储数据、changelog主题历史数据完全不受影响,不会丢失,不需要清空原有状态存储。
- 重平衡过程中,Kafka Streams会自动为新增的输入分区创建对应的状态存储实例,同时自动给关联的changelog主题新增对应数量的分区,全程无需人工介入。
- 不需要删除原有状态存储、创建新输入主题,也不需要重发历史数据:存量分区的历史数据依旧由原有任务处理,新增分区仅处理扩容后写入对应分区的新数据。如果担心操作风险,可提前备份changelog主题的全量数据后再执行扩容。
3. 内部"subscription"主题的处理方案
- 外键连接对应的内部
subscription主题由Kafka Streams全生命周期自动管理,不需要人工做任何调整。 - 输入主题分区扩容触发重平衡后,Streams会自动检测配置变更,给
subscription主题新增对应数量的分区,无需手动修改主题配置、迁移或删除历史数据。
内容的提问来源于stack exchange,提问作者MMEK
相关产品推荐
相关产品推荐

