我如何在python-kafka中使用多个使用者?

时间:2019-08-17 07:07:33

标签: python apache-kafka

我看到了文档。 https://kafka-python.readthedocs.io/en/master/usage.html

我尝试多个消费者。 但这不起作用吗? 以及它是如何工作的?

怎么了?

consumer1 = KafkaConsumer(
     bootstrap_servers=['localhost:9092'],
     #auto_offset_reset='earliest' , # 'earliest',
     #enable_auto_commit= False ,
     group_id='sr',
     value_deserializer=lambda x: loads(x.decode('utf-8')))
consumer1.subscribe("numtest")
consumer2 = KafkaConsumer(
     bootstrap_servers=['localhost:9092'],
     #auto_offset_reset='earliest' , # 'earliest',
     #enable_auto_commit= False ,
     group_id='sr',
     value_deserializer=lambda x: loads(x.decode('utf-8')))
consumer2.subscribe("numtest")
producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                         key_serializer = None ,                         
                         value_serializer=lambda x: 
                         dumps(x).encode('utf-8'))
def on_send_success(record_metadata):
    print("topic : {} , partition : {} , offset : {}".\
          format( record_metadata.topic , record_metadata.partition , record_metadata.offset))

for msg , message in zip(consumer1 , consumer2) :
    print("="*50)
    print ("topic=%s partition=%d offset=%d: key=%s value=%s" % (message.topic, message.partition,
                                          message.offset, message.key,
                                          message.value))
    print ("topic=%s partition=%d offset=%d: key=%s value=%s" % (msg.topic, msg.partition,
                                          msg.offset, msg.key,
                                          msg.value))
    key = str(message.offset) + " " + str(msg.offset)
    producer.send('output', value= {  key : key }  ).add_callback(on_send_success)
    print("="*50)

实际上,我想让两台计算机对模型的表示进行ex输入并合并两个结果。

相反,合并时必须保持相同的偏移量。

之后,我想发送结果输出主题。

output 主题中,我的预期结果是这样的:

{offset = 1:offest = 1},{offset = 2:offest = 2},....

请帮助我!我解决不了

1 个答案:

答案 0 :(得分:0)

您能否进一步说明您的预期结果是什么?

如果您要尝试

  1. 创建两个不同的使用者,其中consumer1和consumer2均收到相同的消息
    • 为此,两个使用者的组ID应该不同,请尝试将“ sr1”和“ sr2”作为组ID。尝试以下代码
consumer1 = KafkaConsumer(
     bootstrap_servers=['localhost:9092'],
     #auto_offset_reset='earliest' , # 'earliest',
     #enable_auto_commit= False ,
     group_id='sr',
     value_deserializer=lambda x: loads(x.decode('utf-8')))
consumer1.subscribe("numtest")
consumer2 = KafkaConsumer(
     bootstrap_servers=['localhost:9092'],
     #auto_offset_reset='earliest' , # 'earliest',
     #enable_auto_commit= False ,
     group_id='sr',
     value_deserializer=lambda x: loads(x.decode('utf-8')))
consumer2.subscribe("numtest")
  1. 创建一个消费者组,其中consumer1获得一些消息,而consumer2获得其余的消息
    • 如果您要实现这一目标,我想您当前的代码也可以正常工作,请记住,由于不同的消费者通常分布在不同的流程中,因此您可能不想这样做。