python KafkaConsumer和Producer同时

时间:2019-09-16 14:35:16

标签: apache-kafka kafka-consumer-api kafka-python

在python程序中,我想向Kafka写一些消息,然后从远程应用程序以不同主题读取相同数量的消息的响应。问题在于,当我完成发送消息时,另一端已经开始响应,并且当我开始阅读时,我只能获得消息批处理的尾部,或者完全不接收消息,具体取决于时间。这与我对软件包的理解相矛盾,即,我认为如果我使用auto_offset_reset='latest'创建一个使用者,并订阅一个主题,那么它会记住订阅时的偏移量以及当我遍历该使用者对象时,它会将开始从该偏移量读取消息。

这是我的工作:

我首先创建一个消费者并订阅out主题:

consumer = KafkaConsumer(
  bootstrap_servers=host+':'+broker_port, 
  group_id = "0", 
  auto_offset_reset='latest',
  consumer_timeout_ms=10000
)
consumer.subscribe(topics=(topic_out))

然后创建一个生产者并将消息发送到topic_in:

producer = KafkaProducer(
   bootstrap_servers=host+':'+broker_port
)
future = producer.send(topic,json.dumps(record).encode('utf-8'))
future.get(timeout=5)

然后我开始从消费者那里阅读:

results = []
for msg in consumer:
   message = json.loads(msg.value)
   results.append(message)

我在发送前尝试了consumer.pause(),在发送后尝试了consumer.resume()-没有帮助。

配置中是否缺少某些内容,或者我误解了Consumer的工作方式?

谢谢!

1 个答案:

答案 0 :(得分:0)

听起来像您的比赛条件。

一种解决方案是存储通过使用此“查找主题”而构建的本地字典或sqlite表,然后当您从“操作主题”使用时,您是在本地进行查找,而不是启动使用方来扫描您所需数据的“查找主题”。