最近項目中總是跟java配合,我一個寫python的程式員,面對有複雜資料結構的java代碼轉換成python代碼,確實是一大難題,有時候或多或少會留有一點坑,看來有空還得看看java基礎。這不今天又開始讓我們串連kafka啦。公司的kafka跟zookeeper做了群集,串連比較麻煩,具體如何使用,java那面做的封裝我也看不到,所以只能通過簡單的溝通。
開始
開始肯定去找python串連kafka的標準庫,kafka-python和pykafka 前者使用的人多是比較成熟的庫,後者是Samsa的升級版本,在網上到文章在python串連並使用kafka 使用samsa串連zookeeper然後使用kafka Cluster很能滿足我的需求,在pykafka的例子中也看到了zk的支援,而kafka-python並沒有zk的支援,所以選擇了pykafka做為串連庫
概念問題
kafaka和zookeeper的群集,使用samsa的時候生產者和消費者都串連了zookeeper,但是我跟峰雲(大資料大牛,營運?潘磕孀?┕低ǎ??鞘褂玫氖焙蚴巧??咧苯恿??afaka伺服器列表,消費者才用zookeeper。這也解決了我看pykafka文檔,只有消費者才串連zookeeper的困惑,所以問題解決,直接按照文檔搞起。
生產者
>>> from pykafka import KafkaClient
>>> client = KafkaClient(hosts="192.168.1.1:9092, 192.168.1.2:9092") # 可接受多個Client這是重點
>>> client.topics # 查看所有topic
>>> topic = client.topics['my.test'] # 選擇一個topic
>>> producer = topic.get_producer()
>>> producer.produce(['test message ' + str(i ** 2) for i in range(4)]) # 加了個str官方的例子py2.7跑
不過
消費者
>>> balanced_consumer = topic.get_balanced_consumer(
consumer_group='testgroup',
auto_commit_enable=True, # 設定為Flase的時候不需要添加 consumer_group
zookeeper_connect='myZkClusterNode1.com:2181,myZkClusterNode2.com:2181/myZkChroot' # 這裡就是串連多個zk
)