-
生产者通过
producerRecord
对象封装消息主题、消息的value(内容)、timestamp(时间戳)等 -
生产者通过
send()
方法发送消息,send()方法会经过如下几步
1. 首先将消息交给拦截器(Interceptor)
处理, 拦截器对生产者而言,对所有消息都是生效的,拦截器也支持链式编程(责任器链)的效果,拦截器一般将一些通用的功能加进来,通常在消息发送前,producer回调逻辑前对消息做一些定制化需求,消息头部添加消息的属性等
2. 接下来交给序列化器(Serializer)
,Key的序列化器和value的序列化器,对消息的key和value进行序列化,序列化为字节数组,
3. 然后将序列化的结果交给分区器(Partitioner)
,分区器有3种策略
来计算消息应该属于哪个分区,-
在producerRecord中直接
指定分区
,分区器会直接将消息放到指定分区 -
如果没有指定分区器,但是
消息有key
,分区器会根据消息的key计算hash值,根据主题分区数量取模,来决定将消息放到哪个分区 -
如果没有指定分区、也没有指定key,分区器会以
轮询(Round Robin
-
Kafka 入门到起飞系列 - 生产者发送消息流程解析
于 2023-07-16 17:29:31 首次发布