Kafka Producer

2019-05-16  本文已影响0人  ands999
producer特点
producer概览

Kafka封装了一套二进制通信协议用于对外提供服务。这组协议为不同的协议类型分别定义了专属的紧凑二进制字节数组格式,然后通过Socket发送给合适的broker,待broker处理完后返回响应。
producer的第二件事就是寻找分区对应的leader,也就是该分区leader副本所在的broker。

消息分区、消息序列化

默认partitioner会根据mumur2算法计算消息key的哈希值,然后对总分区数取模,得到消息要被发送到的目标分区号。如果消息没有key,则会用轮询的方式确保消息在topic的所有分区上均匀分配。
可以自定义消息序列化。

producer拦截器

producer拦截器用于clients端的定制化控制逻辑。interceptor使得用户在消息发送前(用户主线程中)以及producer回调逻辑(I/O发送线程)前有机会对消息做定制化需求。producer运行指定顺序的多个interceptor从而组成拦截链。
interceptor可能运行在多个线程的事实,因此需要自行确保线程安全。

producer工作流程

首先创建待发送的消息对象ProducerRecord,然后调用KafkaProducer#send方法进行发送。
KafkaProducer接收到消息后首先对其序列化,然后结合本地缓存的元数据信息一起发送给partitioner确定目标分区,最后追加写入内存中的消息缓冲池(accumulator)。KafkaProducer的Sender I/O线程将缓冲池中的消息分批次通过socket发送给对应的broker,完成真正的消息发送逻辑。
第一步:序列化+计算目标分区。
第二步: 追加写入消息缓冲区(accumulator)。
第三步:Sender线程预处理及消息发送。
第四步:Sender线程处理response,回调处理。

参考

《Apache Kafka实战》

上一篇 下一篇

猜你喜欢

热点阅读