我正在使用Kafka的Spotify docker版本。 我现在只有一名生产者,一名经纪人和一名消费者。
问题是,使用此配置,我无法从Kafka获取最新消息。
如果我默认为auto_offset_reset='earliest'
,那么我会收到所有消息。
这是我给消费者的代码,即使那里有新消息,它也不会打印来自Kafka的任何消息。
def consumer():
consumer = KafkaConsumer('stories',
enable_auto_commit=False,
value_deserializer=lambda m: json.loads(m.decode('ascii')),
bootstrap_servers=['127.0.0.1:9092'],
auto_offset_reset='latest',
consumer_timeout_ms=1000
)
for message in consumer:
# message value and key are raw bytes -- decode if necessary!
# e.g., for unicode: `message.value.decode('utf-8')`
print("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
message.offset, message.key,
message.value))
有人可以帮助我,让我知道问题出在哪里吗?
我只是想从卡夫卡那里获取消费者未读过的消息。
这里是卡夫卡消费者:https://hastebin.com/umuhugacez.py
这里是卡夫卡制作人:https://hastebin.com/laderolawi.py
答案 0 :(得分:1)
只是一个更新:从Kafka 0.9开始,Kafka使用的是使用者的新Java版本,并且auto.offset.reset参数名称已更改;从手册中:
auto_offset_reset代码错误,应该最早。
最早:将偏移量自动重置为最早的偏移量
最新:自动将偏移量重置为最新的偏移量
无:如果未找到消费者组的先前偏移量,则向消费者抛出异常
其他:向消费者抛出异常。
答案 1 :(得分:0)
我也遇到了这个问题。无论使用者中的设置如何,当我尝试进行视频流传输时,它始终用于缓冲数据。我的案例是通过在定义消费者之后寻求偏移量来解决的。您可以尝试添加
consumer.poll()
consumer.seek_to_end()