在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的工作方式?
谢谢!
答案 0 :(得分:0)
听起来像您的比赛条件。
一种解决方案是存储通过使用此“查找主题”而构建的本地字典或sqlite表,然后当您从“操作主题”使用时,您是在本地进行查找,而不是启动使用方来扫描您所需数据的“查找主题”。