Kakfa揭秘 Day7 Producer源码解密
2016-08-08 21:35
162 查看
Kakfa揭秘 Day7
Producer源码解密
今天我们来研究下Producer。Producer的主要作用就是向Kafka的brokers发送数据。从思考角度,为了简化思考过程,可以简化为一个单机版本的消息队列,只是这个消息队列在远程。Producer.java
让我们从官方的Example开始。主要进行了两步操作,第一步是进行producer的初始化,第二步是发送数据。
Producer初始化
分布式系统一般来说只是在单机的基础上加上分布式的通讯和调度而已。在初始化时有一些重要的参数:
partitioner.class 设置分区方式。
producer.type 数据发送方式,默认是同步方式。
message.send.max.retries 消息发送时重试次数,这也是分布式系统比较重要的设计点。
topic.metadata.refresh.interval.ms 这个参数非常的关键。当我们的broker的发生失败时,会发出一个refresh操作来刷新brokers上topic的元数据,这个参数控制刷新频率。默认每隔10分钟可能刷新下集群的元数据,如果设置负值时只会在失败的时候刷新,如果设置为0,则每次发送一个消息,都会刷新一次元数据,会影响吞吐量。这个刷新东西是在发送之后才会生成,如果从来没发送过数据,则不会刷新。
为什么要刷新元数据?因为partition可能丢失,leader可能不可用,broker可能会挂掉,也可能在线扩容,这些情况都会造成broker的变动,这是kafka集群和broker弱耦合的实现,客户端在运行过程中可以动态的调整元数据。
发送数据
在发送时,首先要找到Kafka主机的ip和端口,由于kafka有一套自己的消息队列组织方式,所以肯定要根据它的方式,看怎么把数据交到队列里去。如下代码可以看到,当没有指定partition时,会从集群的元数据中获取partition的信息。
从Example代码中,我们可以看到send有同步和异步两种方式,默认是同步的方式。如果异步的话,中间会有一个缓存(消息队列),producer发入缓存,broker再从里面抓数据。无论是同步还是异步的方式,都会有一个producer pool的方式,会通过线程的方式连上主机。
下面就是具体的数据传输。
其底层用了socket编程。为了持续不断的传输数据时,socket是一种稳定、可靠、数据量可大可小的通讯方式,socket弄出来比较大,但是值得的。
小结
Kafka的producer总结来看,有三个设计要点:作为Producer发给kafka消息,虽然是分布式的,可以用个queue的角度来理解,由于kafka有一套自己的元数据和数据管理机制,所以需要在发送前获得元数据。
定期会刷新元数据,为了动态扩容和异常处理。
采用socket的方式,进行数据的发送。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580相关文章推荐
- Kakfa揭秘 Day7 Producer源码解密
- Kakfa揭秘 Day6 Consumer源码解密
- Kakfa揭秘 Day6 Consumer源码解密
- Kakfa揭秘 Day3 Kafka源码概述
- Kafka的Producer和Consumer源码学习
- Spark Streaming揭秘 Day5 初步贯通源码
- Live555源码彻底解密(根据testRTSPClient讲解)
- ReactiveSwift源码解析(八) SignalProducer的代码的基本实现
- 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等
- Kafka Java API 之Producer源码解析
- 大数据IMF传奇行动绝密课程第90课:SparkStreaming基于Kafka Receiver案例实战和内幕源码解密
- 第42课: Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践
- AES加解密源码(直接可调用)
- 第14课:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密
- 庖丁解牛-----Live555源码彻底解密(RTP解包)
- apache kafka源码分析-Producer分析---转载
- Kafka源码深度解析-序列2 -Producer -Metadata的数据结构与读取、更新策略
- Kafka源码深度解析-序列5 -Producer -RecordAccumulator队列分析
- spark内核揭秘-06-TaskSceduler启动源码解析初体验
- 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕