我已经设置了一个heroku kafka实例,我正在尝试使用python使用者连接到它。我将heroku环境放在名为.env
的文件中,方法是heroku config -s > .env
,然后在运行此python程序之前加载并导出它:
import os
from kafka import KafkaConsumer
for variable in ['KAFKA_TRUSTED_CERT', 'KAFKA_CLIENT_CERT', 'KAFKA_CLIENT_CERT_KEY']:
with open(f'{variable}.txt', "w") as text_file:
print(os.environ[variable], file=text_file)
consumer = KafkaConsumer('test-topic',
bootstrap_servers=os.environ['KAFKA_URL'],
security_protocol="SSL",
ssl_certfile="KAFKA_CLIENT_CERT.txt",
ssl_keyfile="KAFKA_CLIENT_CERT_KEY.txt"
)
for msg in consumer:
print (msg)
我找不到任何看似可以从变量加载证书的选项,所以我在启动程序时将它们全部放在文件中。
当我运行该程序时,它会创建临时文件并且不会抱怨,但不会打印任何消息。
当我像这样使用heroku cli写主题时
heroku kafka:topics:write test-topic "this is a test"
python客户端没有打印消息,但我可以通过
看到消息heroku kafka:topics:tail test-topic
有人知道我在python消费者配置中缺少什么吗?
答案 0 :(得分:0)
在Heroku Kafka官方文档中:
https://devcenter.heroku.com/articles/kafka-on-heroku#using-kafka-in-python-applications
它指出使用Kafka帮助程序是有益的。如果您查看源代码:
https://github.com/heroku/kafka-helper/blob/master/kafka_helper.py
可以看到他们正在将Kafka变量写入文件并创建ssl_context。