簡體   English   中英

我可以從Python調用Bluemix消息中心服務嗎?

[英]Can I call the Bluemix message hub service from Python?

kafka-python客戶端支持Kafka 0.9,但顯然不包括新的身份驗證和加密功能,因此我猜測它僅適用於開放式服務器(與以前的版本一樣)。 無論如何,甚至Java客戶端都需要一個特殊的消息中心登錄模塊來連接(或者從示例中可以看出),這表明除非有類似的模塊可用於Python,否則任何東西都將無法工作。

我的特定情況是,我想使用同樣由Bluemix托管的Jupyter筆記本中的消息中心服務(Apache Spark服務)。

我能夠使用kafka-python庫進行連接:

$ pip install --user kafka-python

然后 ...

from kafka import KafkaProducer
from kafka.errors import KafkaError
import ssl

############################################
# Service credentials from Bluemix UI:
############################################
bootstrap_servers =   # kafka_brokers_sasl
sasl_plain_username = # user
sasl_plain_password = # password
############################################

sasl_mechanism = 'PLAIN'
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 = bootstrap_servers,
                         sasl_plain_username = sasl_plain_username,
                         sasl_plain_password = sasl_plain_password,
                         security_protocol = security_protocol,
                         ssl_context = context,
                         sasl_mechanism = sasl_mechanism,
                         api_version=(0,10))

# Asynchronous by default
future = producer.send('my-topic', b'raw_bytes')

# Block for 'synchronous' sends
try:
    record_metadata = future.get(timeout=10)
except KafkaError:
    # Decide what to do if produce request failed...
    log.exception()
    pass

# Successful result returns assigned partition and offset
print (record_metadata.topic)
print (record_metadata.partition)
print (record_metadata.offset)

從Bluemix spark到jupyter筆記本,這對我來說都是有效的,但是請注意,這種方法沒有使用spark。 該代碼僅在驅動程序主機上運行。

已要求在Kafka Python客戶端中提供SASL支持: https : //github.com/dpkp/kafka-python/issues/533,但是直到支持Message Hub使用的用戶名/密碼登錄方法后,該方法才起作用

在Bluemix Apache Spark Service本地支持此功能之前,您可以采用與Realtime Sentiment Analysis項目相同的方法。 可以在cds實驗室spark示例github repo上找到幫助程序代碼。

我們已經在非Java語言支持的文檔中添加了一些文本-請參見“在非Java應用程序中進行連接和認證”部分: https : //www.ng.bluemix.net/docs/services/MessageHub/index .html

我們當前的身份驗證方法是非標准的,Apache項目不支持此方法,但這只是一個臨時解決方案。 Message Hub團隊正在與Apache Kafka社區合作開發KIP-43 最終確定后,我們將更改Message Hub身份驗證實現以使其匹配,並且有可能以任何語言實現該規范的客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM