在Kafka中,当多个消费者订阅同一主题时,每个消费者可能会有不同的偏移量。在水平扩展 Kafka 消费者时,需要考虑各个消费者的偏移量。以下是解决方法的代码示例:
from kafka import KafkaConsumer
from kafka import TopicPartition
# 定义一个列表,其中包含待消费的主题和分区
partitions = [TopicPartition('my_topic', i) for i in range(4)]
# 定义一个字典,将每个消费者ID与其偏移量对应起来
consumer_offsets = {
'consumer1': {partitions[0]: 10, partitions[1]: 15, partitions[2]: 20},
'consumer2': {partitions[0]: 5, partitions[1]: 9, partitions[3]: 35}
}
# 定义Kafka消费者
consumer = KafkaConsumer(
bootstrap_servers=['localhost:9092'],
group_id='my_group_id',
auto_offset_reset='earliest',
enable_auto_commit=False)
# 针对每个消费者,为其分配偏移量
for consumer_id in consumer_offsets:
for tp in consumer_offsets[consumer_id]:
consumer.assign([tp])
consumer.seek(tp, consumer_offsets[consumer_id][tp])
# 使用消费者进行数据获取
for message in consumer:
print(message.value)
consumer.commit() # 每获取一条消息,就提交偏移量
在上述代码中,我们首先定义了一个包含所有主题和分区的列表。然后,将每个消费者ID与其偏移量对应起来,存储在一个字典中。在每个消费者启动时,将在字典中查找其偏移量,并将其分配给消费者。然后,使用消费者进行消息获取,并在获取每条消息后提交其
上一篇:不同片段中的相同数据绑定布局