python - 如何使用pykafka consumer進行數(shù)據(jù)處理并保存?
問題描述
使用本地kafka bin/kafka-console-producer.sh --broker-list kafkaIP:port --topic topicName創(chuàng)建命令行生產(chǎn)數(shù)據(jù),然后打開python
from pykafka import KafkaClientclient = KafkaClient(hosts='192.168.x.x:9092')topic = client.topics[’wr_test’]consumer = topic.get_balanced_consumer(consumer_group=’test-consumer-group’,auto_commit_enable=True,zookeeper_connect=’192.168.x.x:2121’)
然后自己編寫了簡單的一套處理函數(shù),從外部引用。將數(shù)據(jù)處理后存入elasticsearch 或者 數(shù)據(jù)庫比如for msg in consumer:
if msg is not None: 外部引入的處理函數(shù)(msg.value)
在python命令行for msg in consumer:
print msg.offset, msg.value
這時候使用生產(chǎn)者敲入一些數(shù)據(jù),在消費端就會就會立即打印出來但是寫成py文件之后,每次運行只會處理最近的生產(chǎn)的一次內(nèi)容,在生產(chǎn)者中再進行輸入一些內(nèi)容,py文件就不會再進行數(shù)據(jù)處理了。所以向問下如何編寫能運行后能一直對消費者數(shù)據(jù)進行處理的函數(shù)?要注意哪些地方?
另外,get_balanced_consumer的方法,是連接zookeeper消費使用topic.get_simple_consumer是直接消費kafka,使用這種方式就提示No handler for...的錯誤
還有一個疑問,就是實際生產(chǎn)環(huán)境日志產(chǎn)生量很快,應(yīng)該如何編寫一個多線程處理方法?
問題解答
回答1:在別人的博客看到一種替代的解決方案http://www.cnblogs.com/castle...從consumer中將msg.value讀取到一個列表當中,然后從列表中讀取數(shù)據(jù)進行數(shù)據(jù)處理,當這個流程結(jié)束后,再把列表中獲取的數(shù)據(jù)pop掉。另外也要用try: ... except :... continue
相關(guān)文章:
1. java-se - 正在學(xué)習(xí)Java SE,為什么感覺學(xué)習(xí)Java就是在學(xué)習(xí)一些API。2. 運行python程序時出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯誤?3. html5 - iOS的webview加載出來的H5網(wǎng)頁,怎么修改html標簽select的樣式字體?4. 一個mysql聯(lián)表查詢的問題5. 主從備份 - 跪求mysql 高可用主從方案6. python如何不改動文件的情況下修改文件的 修改日期7. python 如何實現(xiàn)PHP替換圖片 鏈接8. javascript - git clone 下來的項目 想在本地運行 npm run install 報錯9. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應(yīng)用上有什么區(qū)別?10. mysql - 一個表和多個表是多對多的關(guān)系,該怎么設(shè)計
