使用python的Kafka消费者投票消息

使用python的Kafka消费者投票消息,python,apache-kafka,consumer,kafka-python,Python,Apache Kafka,Consumer,Kafka Python,我在消费者群中轮询来自卡夫卡的消息时遇到问题。 我的使用者对象分配给具有 self.ps = TopicPartition(topic, partition ) self.consumer.seek_to_beginning(self.ps) pos = self.consumer.position(self.ps) 之后,使用者将分配给该分区: self.consumer.assign([self.ps]) 在这之后,我可以使用 self.ps = TopicPartition(topi

我在消费者群中轮询来自卡夫卡的消息时遇到问题。 我的使用者对象分配给具有

self.ps = TopicPartition(topic, partition )
self.consumer.seek_to_beginning(self.ps)
pos = self.consumer.position(self.ps)
之后,使用者将分配给该分区:

self.consumer.assign([self.ps])
在这之后,我可以使用

self.ps = TopicPartition(topic, partition )
self.consumer.seek_to_beginning(self.ps)
pos = self.consumer.position(self.ps)
self.consumer.seek_to_end(self.ps)

在我的主题中有超过30000条消息。 问题是我只收到一条信息

消费者配置包括:
max\u poll\u records=200
AUTO\u OFFSET\u RESET
最早

这是我的函数,我正在尝试获取消息:

 def poll_messages(self):


    data = []

    messages = self.consumer.poll(timeout_ms=6000)


    for partition, msgs in six.iteritems(messages):

        for msg in msgs:

            data.append(msg)

    return data
即使我在开始轮询消息之前转到第一个可用的偏移量 我只收到一条信息

self.consumer.seek(self.ps, self.get_first_offset())
我希望有人能解释我做错了什么。 提前谢谢

祝福
Jörn

我相信你误解了max_poll_记录-这并不意味着每次投票你会得到200份,只是对你可能得到的最多的限制。您需要多次致电poll。我想让您参考文档中的简单示例:

我认为更标准的实施方式是:

for message in self.consumer:
  # do stuff like:
  print(msg)

不幸的是,尼克,我相信你的例子是一个障碍。你为什么这么说?它不会影响轮询机制,是吗?我还没有看过源代码,如果队列中没有消息(没有要读取的内容),for循环就不会移动。这本身不是一个问题,但它给了您更少的灵活性。上面的“soa”代码使用轮询,它将在队列上等待几秒钟,然后执行其他操作。我认为“soa”正在寻找轮询解决方案。这是阻塞代码。例如,您希望将此数据发送到套接字,这将阻塞代码,并且只允许创建或打开1个连接。