问题描述:在使用Python编写消费者代码时,无法消费Apache Kafka主题中的最后一条消息。
解决方案:
在开始检查代码之前,可以使用命令行实用程序消费最后一条消息,以确认Kafka主题中是否存在数据,如果存在,则可能是代码问题。
使用正确的配置初始化Kafka消费者。
例如:
from kafka import KafkaConsumer
consumer = KafkaConsumer( 'my-topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='latest', group_id='my-group', enable_auto_commit=True, value_deserializer=lambda x: loads(x.decode('utf-8')))
请确保消费者实例的分区数与主题的分区数相同。如果它们不匹配,则无法消费主题中的所有消息。可以通过检查分配给消费者实例的分区以及主题的分区来检查它们是否匹配。
例如:
from kafka import TopicPartition
tp = TopicPartition('my-topic', 0) # assuming only one partition in the topic consumer.assign([tp])
确认消费者使用最新的偏移量消费消息。
例如:
for message in consumer: # do something with message
使用以下代码行手动提交偏移量,确保在重新启动消费者实例时不会重复消费消息。
例如:
for message in consumer: # do something with message consumer.commit()