> 文章列表 > 10 kafka生产者发送消息的原理

10 kafka生产者发送消息的原理

10 kafka生产者发送消息的原理

1.发送原理:

消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程
中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulatorSender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker

在这里插入图片描述

  1. 通用是不使用这个拦截器的,使用的是Flume的拦截器,对数据进行加工
  2. 不使用Java的序列化工具,因为Java的序列化太重,大数据量并不适用
  3. 数据经过分区器后,一个分区会创建一个队列
  4. 创建队列的过程都是在内存中完成的,队列内存的总大小是32M,传输数据的批次大小是16KB,
  5. sender线程是专门用来将数据发送至broker的。缓冲区大小到达阙值后发送或者是时间到达后开启发送

消息发送到哪一个partition呢?

(1)如果消息中指定了Partition id,那就发送到对应的partition;
(2)如果没有,那就消息的key进行hash一下;
(3)如果id和key都没有,那就随机;

kafka消息的确认机制ack

(1)0表示不需要ACK,安全性低效率高;
(2)1表示需要一个ACK才会继续下一条;(一个follower接收就可以)
(3)-1(all)表示所有的follower都完成才会继续下一条,效率最低;

在这里插入图片描述