向着百万年薪努力的小赵

向着百万年薪努力的小赵

发送的目的就一个,将消息发到kafka集群里,整体流程如下:
kafka学习笔记--生产者消息发送及原理-LMLPHP

如上图,首先要有一个发送消息的主线程,也就是main线程,然后有一个读取数据的线程sender,所有的消息先经过拦截器(一般不用,因为大数据体系中,使用flume充当拦截器更加方便),然后抵达序列化器,最后抵达分区器,然后发送消息

分区器会在内存中,为每一个kafka分区创建一个双端队列,方便消息的管理,分区器大小为默认32M,每个队列在数据达到16k时,由sender线程读取,当然长时间达不到16k数据的队列,也会每隔一段时间(默认0ms)发送一次,采用默认策略则意味着每条消息都发送,在大数据场景下,应当灵活调整

达到拉取条件(16k或时长)的数据,sender线程会主动从分区器内存空间中拉取数据,为每一个节点创建一个请求队列,队列中最多等待5个请求,发送到kafka集群,kafka给予应答回应
如果发送成功,则关闭、清理该请求,同时清理掉分区器队列中相应的数据
如果发送失败,则重试发送,直到重试到设定的次数为止(默认重试次数为int最大值)

12-09 14:09