Kafka生产者消费者模型学习

1. 是一个分布式消息系统,具有高水平扩展和高吞吐量, Apache Flume,Apache Strom, Spark elasticsearch 都支持kafka集成

2. AMQP协议
     producer ——push——> broker <——pull—— consumer
    kafka支持客户端语言: java c c++ erlang .net perl php python ruby go javascript

3.kafka概念
     主题(Topic):一个主题类似新闻的体育,娱乐,教育分类概念,在实际业务中通常一个业务一个主题;
     分区(Partition):一个Topic的消息数据是按照多个分区组织的,分区是kafka消息队列的最小单位,一个分区可以看成一个FIFO队列

4.zookeeper集群搭建
     软件环境 
          Linux服务器 2*n+1台
          JDK1.7+
          zookeeper3.4.6+
      布置配置zk: 配置dataDIr,以及日志输出路径和集群设置感知, 创建dataDIr指向路劲创建myid文件
   
     清理日志脚本设置成定时任务执行  
          星期天的0点0分执行  0 0 * * 0 sh home/program/zookeeper/cleanup.sh
          crontab -l

5.Kafka集群搭建
     ./kafka-server-start.sh -daemon ../config/server.properties

6.kafka消费者编程模型
          分区消费模型
                   main()
                         获取分区的size
                         for index =0 to size
                              create thread(or process) consumer(index)
                    第inde个线程(进程)
                    consumer(index)
                         创建到kafka broker的连接 KafkaClient(host,port)
                         指定消费参数构建consumer: SimpleConsumer(topic,partition)
                         设置消费offset: consumer.seek(offset,0)
                         while True
                              消费指定topic第index个分区的数据
                              处理
                         记录当前的消息的offset
                         提交当前的offset(可选)
                    
          组消费模型
                   main()
                         设置需要创建的流数N     
                         for index=0 to N
                              create thread consumer(index)
                   第index个线程
                        consumer(index)
                              创建到kafka broker的连接: KafkaClient(host,port)
                              指定消费参数构建consumer: SimpleConsumer(topic,partions)
                              设置从头消费还是从最新消费(smallest 或largest)
                              while True
                                   从指定topic的第index个流获取数据
                                   处理
                                   (offset会自动提交zookeeper,无需我们操作)
                         
          两种消费模型对比

                  分区消费模型更加灵活但是:
                    1)需要自己处理各种异常情况
                    2)需要自己管理offset(以实现消息传递的其他语义)

                   组消费模型更加简单,但是不灵活:
                    1) 不需要自己处理异常情况,不需要自己管理offset
                    2) 只能实现kafka默认的最少一次消息传递语义

    7.kafka消费者的python和java客户端实现
          Python客户端实例讲解
          Python客户端参数调优
                    fetch_size_byte:从服务器获取单包大小
                    buffer_size: kafka客户端缓冲区大小
                    Group:分组消费时的组名     
                    auto_commit:offset是否自动提交
          Java客户端实例讲解
          Java客户端参数调优

     kafka生产者编程模型
          同步生产模型
               一直重新发送,一直等到kafka回应消息,才发送下一条消息
               
               
          异步生产模型:
                   message.send.max.retries:发送失败重试次数;
                    retry.backoff.ms:未接到确认,认为发送失败的时间
                    producer.type: 同步发送或者异步发送
                    batch.num.message:异步发送时,累计最大的消息数;
                    queue.buffering.max.ms:异步发送时,累计最大时间.

               main()
                    创建到kafka broker 的链接 : kafkaClient(host,port)
                    选择或定义生产者负载均衡算法 partitioner
                    设置生产者参数
                     根据负载均衡算法和设置生产者参数构造Producer对象
                    
                    While True
                         getMessage:从上游获取一条消息
                         按照kafka要求的消息格式构造kafka消息
                              根据分区算法得到分区
                         发送消息
                         处理异常

转载于:https://my.oschina.net/exit/blog/512876

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值