python操作kafka


#coding=utf-8
from pykafka import KafkaClient
import codecs
import logging
logging.basicConfig(level = logging.INFO)

client = KafkaClient(hosts = "172.16.82.163:9091")

#生產kafka數據,通過字符串形式
def produce_kafka_data(kafka_topic):
  with kafka_topic.get_sync_producer() as producer:
    for i in range(4):
      producer.produce('test message' + str(i ** 2))

#消費kafka數據
def consume_simple_kafka(kafka_topic, timeout):
  consumer = kafka_topic.get_simple_consumer(consumer_timeout_ms = timeout)
  for message in consumer:
    if message is not None:
      print message.offset, message.value

#消費同一份kafka topic時,建議使用 get_balanced_consumer(),暫時不能使用
#問題:kazoo.handlers.threading.KazooTimeoutError: Connection time-out
def consume_kafka(kafka_topic, zkhost):
  balanced_consumer = kafka_topic.get_balanced_consumer(
  consumer_group = "testgroup",
  auto_commit_enable = False,
  zookeeper_connect = zkhost,
  #zookeeper = zkhost,
  zookeeper_connection_timeout_ms = 6000,
  consumer_timeout_ms = 10000,
  )
  for message in balanced_consumer:
    if message is not None:
      print message.offset, message.value

#通過文件,往kafka刷數據
def produce_kafka_file(filename, kafka_topic):
  with kafka_topic.get_sync_producer() as producer:
    with codecs.open(filename, "r", "utf8") as rf:
      for line in rf:
        line = line.strip()
        if not line:
          continue
      producer.produce(line)

#===========================================================

topic = client.topics["mytest"]

#在consumer_timeout_ms內沒有任何信息返回,則中斷接受消息
cosumer = topic.get_simple_consumer(consumer_timeout_ms = 10000)
cnt = 0
for message in cosumer:
  if message is not None:
    print message.offset, message.value
  cnt += 1
print cnt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM