1.ProducerRecord
如果 key 不为 null,那么默认的分区器会对 key 进⾏哈希(采⽤ MurmurHash2 算法,具备 ⾼运算性能及低碰撞率),最终根据得到的哈希值来计算分区号,拥有相同 key 的消息会被写⼊同⼀个分区。如果 key 为 null,那么消息将会以轮询的⽅式发往主题内的各个可⽤分区。
注意:如果 key 不为 null,那么计算得到的分区号会是所有分区中的任意⼀个;如果 key 为 null 并且有可⽤分区时,那么计算得到的分区号仅为可⽤分区中的任意⼀个,注意两者之间的差 别。
2.消息发送到broker
有可能需要经过拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)的⼀系列作⽤之后才能被真正地发往 broker。
生产者拦截器,实现ProducerInterceptor接口:
onSend() :在消息发送之前执行
onAcknowledgement():在消息被应答之前或消息发送失败,优于callback执行。
拦截链:按配置先后执行
更多关于大数据培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。