consumer设计原理
1 | kafka consumer:用户主线程、心跳线程 |
定制两套多线程方案
1 | 1. 消费者程序启动多个线程,每个线程维护专属的 KafkaConsumer 实例,负责完整的消息获取、消息处理流程 |
方案 | 优点 | 缺点 |
---|---|---|
方案1: 多线程+多KafkaConsumer实例 | 1. 方便实现 2. 速度快,无线程间交互开销 3. 易于维护分区内的消费顺序 |
1. 占有更多系统资源 2. 线程数受限于主题分区数,扩展性差 3. 线程自己处理消息容易超时,从而引发Rebalance |
方案2: 单线程+单KafkaConsumer实例+消息处理Worker线程池 | 1. 可独立扩展消费获取线程数和Worker线程数 2. 伸缩性好 |
1. 实现难度高 2. 难以维护分区内的消息消费顺序 3. 处理链路拉长,不易于位移提交管理 |
方案1的主体代码
1 |
|
方案2的主体代码
1 |
|