一、Producer(生产者)工作原理
说明:
- 生产者发送消息涉及两个线程 main线程、RecordAccumulator(缓存区)、sender线程:
1.1 main线程
1️⃣创建KafkaProducer对象。
2️⃣拦截器(Interceptor)过滤处理:常常使用Flume的拦截器,对数据进行加工过滤处理(可选项)。
3️⃣序列化器(Serializer):将数据序列化为方便网络传输的二进制形式。(必选项)
4️⃣分区器(Partioner):指定生产者消息分区策略。
1.2 sender线程
7️⃣每一个broker节点,都会创建一个request队列,默认每个broker节点最多缓存5个请求。
数据有序性 | 说明 |
---|---|
max.in.flight.requests.per.connection | 允许最多没有返回 ack 的次数,默认为 5,开启幂等性要保证该值是 1-5 的数字。 |
enable.idempotence=true(默认) | 幂等性 |
8️⃣ Selector,将数据发送给Kafka brokers集群。
9️⃣集群收到Producer数据后的应答(ACK):
应答级别ACK | 说明 |
---|---|
0 | 不需要等数据落盘应答。 |
1 | Leader 收到数据后应答。 |
-1(all) | Leader+和 isr 队列里面的所有节点收齐数据后应答。默认值是-1,-1 和all 是等价的。 |
🔟 当8️⃣ 发送失败