一、概述

最近研究了一下多线程消费 Kafka ,其实大体可以分为两种方式,本文只介绍一种,相对而言比较通俗易懂。

创建线程池,程序启动多个线程,每个线程创建对应的消费者实例,负责完整的消息获取、处理、offset 提交。

优点 缺点
实现方便 会占用更多的内存和TCP连接数。
速度快,无线程间交互开销 线程数受制于主题分区数。
易于维护分区内的消费顺序 当线程处理自己消息时容易超时,从而引发 Rebalance 。

简单来说,Java Consumer API 是单线程设计,KafkaConsumer 不是线程安全,就是不能在多个线程中共用一个 KafkaConsumer 实例,否则程序会抛出 ConcurrentModificationException 异常。

二、重要消费者配置

三、流程示例

1、获取 offset

2、提交 offset

订阅多个 topic ,看看会怎样。