kafka编程模型

来源:互联网 发布:12306网络购票暂停 编辑:程序博客网 时间:2024/05/23 17:50

  • kafka消费者编程模型
  • kafka 消费者的pythone 和java客户端实现
    • 1 python 客户端实例
    • 2 python 客户端参数调优
    • 3 Java 客户端实例
    • 4 Java 客户端参数调优
  • kafka生产者编程模型
    • 1 同步生产模型
    • 2 异步生产模型
    • 3 两种生产模型伪代码描述
    • 4 两种生产模型对比
  • kafka生产者的python和java 客户端实现
    • 1 Python客户端实例讲解
      • 同步生产模型
      • 异步生产模型
    • 2 Python客户端参数调优
    • 3 Java客户端实例讲解
    • 4 Java客户端参数调优

1 kafka消费者编程模型

  • 分区消费模型

    • 一个分区对应一个消费者
      这里写图片描述

    这里写图片描述

  • 组(Group)消费模型
    这里写图片描述
    这里写图片描述
    这里写图片描述

  • 两种消费模型对比
    这里写图片描述

2 kafka 消费者的pythone 和java客户端实现

2.1 python 客户端实例

  • 安装
    1)github下载kafka-python
    这里写图片描述
    2)安装,先安装six(pypi.python.org下载)后安装python
[root@bigdata kafka-python-0.9.4]# python setup.py install
  • 客户端代码
    分组模式:
import threadingfrom kafka.client import KafkaClientfrom kafka.consumer import SimpleConsumerclass Consumer(threading.Thread):    daemon =True    def run(self):        client =KafkaClient("10.67.89.240:19092,10.67.5.30:19092,10.67.4.214:19092")        consumer = SimpleConsumer(client,"test-group","bruce")        for message in consumer:            print(message.message.value)
import group_consumerimport timedef main():    consumer_thread = group_consumer.Consumer()    consumer_thread.start()    time.sleep(500000)if __name__ == '__main__':    main()

分区模式:

import threadingfrom kafka.client import KafkaClientfrom kafka.consumer import SimpleConsumerclass Consumer(threading.Thread):    daemon = True    def __init__(self,partition_index):        threading.Thread.__init__(self)        self.part = [partition_index]        self.__offset = 0    def run(self):        client = KafkaClient("10.67.89.240:19092,10.67.5.30:19092,10.67.4.214:19092")        consumer = SimpleConsumer(client,"test-group","bruce",auto_commit=False,partitions=self.part)        consumer.seek(0,0)        while True:            message = consumer.get_message(True,60)            self.__offset = message.offset            print message.message.value
import logging,timeimport partition_consumerdef main():    threads = []    partition = 3    for index in range(partition):        threads.append(partition_consumer.Consumer(index))    for t in threads:        t.start()    time.sleep(50000)if __name__ == '__main__':    main()

2.2 python 客户端参数调优

这里写图片描述

  • fetch_size_bytes:从服务器获取单包大小;
  • buffer_size:kafka客户端缓冲区大小(一个fetch_size_bytes由多个buffer_size组成,客户端由多个tcp来回填充到buffers_size);
  • Group:分组消费时分组名
  • auto_commit: offset是否自动提交(一般用于分区模式,设置手动提交将实现其他语义)

2.3 Java 客户端实例

这里写图片描述

2.4 Java 客户端参数调优

这里写图片描述

3 kafka生产者编程模型

3.1 同步生产模型

这里写图片描述

3.2 异步生产模型

这里写图片描述

3.3 两种生产模型伪代码描述

这里写图片描述

3.4 两种生产模型对比

这里写图片描述

4 kafka生产者的python和java 客户端实现

4.1 Python客户端实例讲解

  • 需要的软件环境:
    • 已搭建好的kafka集群、Linux服务器一台、Python2.7.6 、kafka-Python软件包
  • 分区消费模型的Python实现;
  • 组(Group)消费模型的Python实现;

同步生产模型

import threading, timefrom kafka.client import KafkaClientfrom kafka.producer import SimpleProducerfrom kafka.partitioner import HashedPartitionerclass SyncProducer(threading.Thread):    daemon = True    def run(self):        client = KafkaClient("10.206.216.13:19092,10.206.212.14:19092,10.206.209.25:1909")        producer = SimpleProducer(client)        #producer = KeyedProducer(client,partitioner=HashedPartitioner)        while True:            producer.send_messages('jiketest', "test")            producer.send_messages('jiketest', "test")            time.sleep(1)

异步生产模型

import threading, timefrom kafka.client import KafkaClientfrom kafka.producer import SimpleProducerclass ASyncProducer(threading.Thread):    daemon = True    def run(self):        client = KafkaClient("10.67.89.240:19092,10.67.5.30:19092,10.67.4.214:19092")        producer = SimpleProducer(client,async=True)        while True:            producer.send_messages('jiketest', "test")            producer.send_messages('jiketest', "test")            time.sleep(1)

4.2 Python客户端参数调优

  • req_acks:发送失败重试次数;
  • ack_timeout: 未接到确认,认为发送失败的时间;
  • async : 是否异步发送;
  • batch_send_every_n: 异步发送时,累计最大消息数;
  • batch_send_every_t:异步发送时,累计最大时间;

4.3 Java客户端实例讲解

4.4 Java客户端参数调优

  • message.send.max.retries: 发送失败重试次数;
  • retry.backoff.ms :未接到确认,认为发送失败的时间;
  • producer.type: 同步发送或者异步发送;
  • batch.num.messages: 异步发送时,累计最大消息数;
  • queue.buffering.max.ms:异步发送时,累计最大时间;
0 0
原创粉丝点击