我在使用confluent-kafka的python库时遇到了与Kafka消费者有关的问题。
上下文
我在AWS EC2上有一个需要使用的Kafka主题。
场景
使用者脚本(my_topic_consumer.py)使用confluent-kafka-python创建使用者(如下所示)并订阅“ my_topic”主题。问题是使用者无法从Kafka群集中读取消息。
满足所有必需的安全步骤:
1. SSL-消费者和代理的安全协议。
2.已将消费者EC2 IP块添加到群集的安全组中。
#my_topic_consumer.py
from confluent_kafka import Consumer, KafkaError
c = Consumer({
'bootstrap.servers': 'my_host:my_port',
'group.id': 'my_group',
'auto.offset.reset': 'latest',
'security.protocol': 'SSL',
'ssl.ca.location': '/path/to/certificate.pem'
})
c.subscribe(['my_topic'])
try:
while True:
msg = c.poll(5)
if msg is None:
print('None')
continue
if msg.error():
print(msg)
continue
else:
#process_msg(msg) - Writes messages to a data file.
except KeyboardInterrupt:
print('Aborted by user\n')
finally:
c.close()
URLS
经纪人主机:my_host
港口:my_port
组ID:my_group
控制台命令
工作-运行控制台用户脚本,我可以看到数据:
kafka-console-consumer --bootstrap-server my_host:my_port --consumer.config client-ssl.properties --skip-message-on-error --topic my_topic | jq
注意:client-ssl.properties:指向包含证书的JKS文件。
在Kafka集群上进行进一步调试(将使用者与EC2实例分开),我看不到我的使用者通过group_id(my_group)进行的任何注册:
kafka-consumer-groups --botstrap-server my_host:my_port --command-config client-ssl.properties --descrive --group my_group
这使我相信使用者没有在集群上注册,那么SSL握手是否可能失败?如何从消费者方面在python中检查此内容?
注意
-群集位于代理(公司)的后面,但是我在测试之前确实在使用者EC2上运行了代理。
-通过pm2运行了该过程,但没有看到任何错误日志,例如req超时等。
有什么方法可以确定消费者创建是否确实失败并找出根本原因?感谢您的帮助和反馈。