API文档
http://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html.
版本说明
消费者API也分为新版和旧版
开发中都是直接使用新版本API:
org.apache.kafka.clients.consumer.KafkaConsumer
注意:
1.旧版:有两个级别的API:
-
低级/底层:可以手动维护offset
-
高级/高层:自动维护offset
http://kafka.apache.org/0100/documentation.html#impl_consumer.
2.新版:直接将旧版的低阶和高阶整合了,不再区分,可以手动维护offset也可以自动维护offset。
从哪个offset开始消费
1.旧版API:offset保存在ZK中,通过参数指定
- auto.offset.reset 的值为smallest:表示从分区的最小offset开始消费,类似与命令行消费时的 --from-beginning
- auto.offset.reset 的值为largest:表示从分区的最大offset开始消费,也就是从最新的数据开始消费,类似命令行消费时的 不加–from-beginning
2.新版API:offset存储在默认主题__consumer_offsets中,通过参数指定
- auto.offset.reset 的值为earliest :当各分区下有已提交的 Offset 时,从提交的 Offset开始消费;无提交的Offset 时,从最小/最早/最开始的数据开始消费;
- auto.offset.reset 的值为latest : 当各分区下有已提交的 Offset 时,从提交的 Offset 开始消费;无提交的 Offset时,从最大/最新/最后的数据开始消费
- auto.offset.reset 的值为none : Topic 各分区都存在已提交的 Offset 时,从 Offset 后开始消费;只要有一个分区不存在已提交的 Offset,则抛出异常。
如何提交偏移量
1.自动提交—一般都是用自动提交
- enable.auto.commit设置为true 表示自动提交(老版本提交到ZK,新版本提交到默认主题__consumer_offsets中)
- auto.commit.interval.ms设置一个自动提交offset的时间间隔
2.手动提交–对数据要求较高或想要精确控制时用手动提交!
-
enable.auto.commit设置为false表示需要手动提交偏移量
-
consumer.commitAsync();//异步提交
-
consumer.commitSync()//同步提交
导入Maven依赖
<dependencies>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</art