我想通过分布式微服务架构实现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}')