在项目中,大部分情况下,使用Kafka自动管理offset能够满足需求,但是在某些情况下需要使用手动管理Kafka offset,比如必须要求数据处理完成以后才能commit,确保partition的数据被处理完。因此可以使用kafka的ConsumerRebalanceListener进行处理:
1) Subscribe
consumer.subscribe(topics,
new ConsumerRebalanceListener() {
@Overridepublic void onPartitionsRevoked(Collection<TopicPartition> topicPartitions) {
}
@Override
public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
try {
for (TopicPartition partition : partitions) {
PartitionOffset offset = getCustomPartitionOffset(partition);
if (offset != null && offset.getOffset() >= 0) {