PyKafka消费者与终端消费者发生冲突

时间:2018-06-06 09:20:39

标签: python apache-kafka pykafka

我想通过分布式微服务架构实现Kafka消息传递。

我正在使用 PyKafka 并实现虚拟制作人和(平衡)消费者。我将所有消费者分配到相同的消费者群体。我可以同时使用 Python和控制台的生成器,甚至运行时添加它们也没有问题。

但是,我对消费者有疑问。我可以创建多个Python使用者,甚至运行时添加它们。但是当我使用Python消费者向组添加Console使用者(kafka-console-consumer)时,我得到了互斥错误:

在消费者ID'b'Michals-MacBook-Pro.local:1722eea0-07d3-4be4-9d97-8b7fb15b0b30'中提交主题'b'michal_sample_topic''的偏移时出错:错误:{'pykafka.exceptions .UnknownMemberId':[0,1}})

此外,这两者(即使它们属于同一个消费者群体)正在消费消息(Python消费者在它们之间平衡它们并且控制消费者彼此之间)

现在,我是Kafka的新手,但我的第一印象是Kafka应该与消费者的实施无关,因此应该可以将它们结合起来。我的理解是问题,PyKafka还是我对PyKafka的实现?

制片:

from pykafka import KafkaClient
from time import sleep

client = KafkaClient(hosts="localhost:9092")

print(client.brokers)
print(client.topics)

topic = client.topics[b'michal_sample_topic']

with topic.get_sync_producer() as producer:

while True:
    producer.produce(
        bytes(
            input('Send test message:'), 
            'utf-8'
        )
    )

消费者:

from pykafka import KafkaClient

client = KafkaClient(hosts="localhost:9092")

print(client.brokers)
print(client.topics)

topic = client.topics[b'michal_sample_topic']

balanced_consumer = topic.get_balanced_consumer(
    consumer_group=b'testing',
    auto_commit_enable=True,
    zookeeper_connect='localhost:2181'
)

for message in balanced_consumer:
    if message is not None:
        print(f'{message.offset} {message.value}')

0 个答案:

没有答案