Kafka生产者模型
(1)同步生产模型
如图上所示,同步生产模型中,生产者发送消息后需要等待服务端确认消息(配置的消息确认等待时间),如果没有确认消息则生产者会再次发送对应消息,直到达到设置的最大次数。如果有一次收到确认消息,则停止发送继续发送下一次,这就是“至少一次”发送语义!
同步生产模型特点:
–低的消息丢失率
–高消息重复率(由于网络原因,回复确认未收到)
–高延迟(需要确认)
–低吞吐量(需要确认)
(2)异步生产模型
异步发送模型中,生产者首先将消息放入到发送队列,但队列累计数量达到配置的消息数或者累计的时间达到超时时间,则生产者将缓冲区中所有的数据一块发送给kafka的broker。
异步生产模型特点
–低延迟
–高发送性能
–高消息丢失率
(1)无确认机制
(2)发送队列满,再次发送消息也会丢掉直到整个队列发送给kafka服务器才空出来接收下一个发送消息
(3)发送队列满或累计达到超时时间,生产者将队列所有数据一起打包发送给服务器,但再送过程中由于网络原因失败且无确认机制所以导致发送失败,数据丢失。
–高吞吐量(每一个分区50w/s)
总结
以上两种的伪代码:
(1)创建到kafka的broker的连接
(2)选择或自定义生产者负载均衡算法partition(默认提供负载、轮训、随机)
(3)设置生产者相关参数配置(在此处配置同步或异步生产模型)
(4)根据负载均衡算法和设置的生产者参数构造Producer对象
(5)循环处理如下流程
a、从上游获取一条消息
b、按照kafka要求的消息格式构造kafka消息
c、根据分区算法得到分区-计算分区
d、发送消息
e、处理异常
模型选择
如果处理的数据不能丢失,那么用同步,如果需要高的吞吐量且丢失部分消息也不影响则选择异步生产模型。