我读过卡夫卡的文件
但我不明白。我可以为Python Producers使用用户名和密码吗?
可以指定任何Producer只能生成一个Topic,如MySQL
。(生成器用Python编写)
答案 0 :(得分:1)
是的,您可以为每个主题设置用户/通行证。请参阅official documentation 授权和ACL 。
您可以使用SSL或SASL,Kafka的SASL支持来启用安全性:
从文档中添加Acls的示例:
假设您要添加acl" Principals User:Bob和User:Alice可以从IP 198.51.100.0和IP 198.51.100.1"执行主题测试主题的操作读取和写入。您可以通过以下选项执行CLI来执行此操作: 1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic
同样在此Blog post中,您可以找到一些信息
我不确定您使用的是哪个库,但它应该只是将适当的属性传递给生产者/客户端; kafka-python 有支持:
答案 1 :(得分:1)
如果要使用username + password进行身份验证,则需要使用群集上的Plain机制启用SASL身份验证。有关完整说明,请参阅Kafka网站上的Authentication using SASL部分。
请注意,您可能还希望启用SSL(SASL_SSL),否则,SASL Plain将以纯文本格式传输凭据。
多个Python客户端支持SASL Plain,例如:
关于授权,使用默认授权程序asyncAfter
,您可以限制生产者只能生成主题。同样,这一切都在Kafka的Authorization and ACLs部分网站上完整记录。
例如,对于SASL Plain,默认情况下,Principal名称是用于连接的用户名。使用以下命令,您可以限制用户kafka.security.auth.SimpleAclAuthorizer
仅能够生成名为Alice
的主题:
testtopic
答案 2 :(得分:0)
您的意思是这样的吗?
topic = "test"
sasl_mechanism = "PLAIN"
username = "admin"
password = "pwd$"
security_protocol = "SASL_PLAINTEXT"
#context = ssl.create_default_context()
#context.options &= ssl.OP_NO_TLSv1
#context.options &= ssl.OP_NO_TLSv1_1
consumer = KafkaConsumer(topic, bootstrap_servers='kafka1:9092',
#api_version=(0, 10),
security_protocol=security_protocol,
#ssl_context=context,
#ssl_check_hostname=True,
#ssl_cafile='../keys/CARoot.pem',
sasl_mechanism = sasl_mechanism,
sasl_plain_username = username,
sasl_plain_password = password)
#ssl_certfile='../keys/certificate.pem',
#ssl_keyfile='../keys/key.pem')#,api_version = (0, 10))