Why Kafka-python Fails To Connect To Bluemix Message Hub Service?
I'm trying to connect to a Bluemix Message Hub instance on http://bluemix.net. This simple script #!/usr/bin/env python from kafka import KafkaProducer from kafka.errors import
Solution 1:
Message Hub requires that clients connect using a TLS 1.2 connection. This means specifying a security_protocol
parameter to KafkaProducer
and also a ssl.SSLContext
via the ssl_context
parameter - as it appears that the Python Kafka client creates a SSLv23
context by default.
Here are the changes required to connect:
import ssl
from kafka import KafkaProducer
from kafka.errors import KafkaError
kafka_brokers_sasl = [
"kafka01-prod01.messagehub.services.us-south.bluemix.net:9093",
"kafka02-prod01.messagehub.services.us-south.bluemix.net:9093",
"kafka03-prod01.messagehub.services.us-south.bluemix.net:9093",
"kafka04-prod01.messagehub.services.us-south.bluemix.net:9093",
"kafka05-prod01.messagehub.services.us-south.bluemix.net:9093" ]
sasl_plain_username = "xxxxxxxxxxxxxxx"
sasl_plain_password = "xxxxxxxxxxxxxxxxxxxxxxxxx"
sasl_mechanism = 'PLAIN' # <-- changed from 'SASL_PLAINTEXT'
security_protocol = 'SASL_SSL'
# Create a new context using system defaults, disable all but TLS1.2
context = ssl.create_default_context()
context.options &= ssl.OP_NO_TLSv1
context.options &= ssl.OP_NO_TLSv1_1
producer = KafkaProducer(bootstrap_servers = kafka_brokers_sasl,
sasl_plain_username = sasl_plain_username,
sasl_plain_password = sasl_plain_password,
security_protocol = security_protocol,
ssl_context = context,
sasl_mechanism = sasl_mechanism)
Post a Comment for "Why Kafka-python Fails To Connect To Bluemix Message Hub Service?"