Skip to content Skip to sidebar Skip to footer

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?"