目录
多动手、多实践、多理解、多思考、多复习
3.1 生产者消息发送流程
3.1.1 发送原理
- 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程 中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator, Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broker。
发送流程示意图:
3.1.2 生产者重要参数列表
3.2 异步发送 API
3.2.1 普通异步发送
异步发送流程
3.2.2 带回调函数的异步发送
回调函数会在 producer 收到 ack 时调用,为异步调用,该方法有两个参数,分别是元数据信息(RecordMetadata)和异常信息(Exception),如果 Exception 为 null,说明消息发 送成功,如果 Exception 不为 null,说明消息发送失败。
带回调函数的异步发送流程
- 注意:消息发送失败会自动重试,不需要我们在回调函数中手动重试。
3.3 同步发送 API
只需在异步发送的基础上,再调用一下 get()方法即可。
3.4 生产者分区
3.4.1 分区好处
3.4.2 生产者发送消息的分区策略
自定义分区器
- 定义类实现 Partitioner 接口。
- 重写 partition()方法。
3.5 生产经验——生产者如何提高吞吐量
3.6 生产经验——数据可靠性
acks 应答原理
3.7 生产经验——数据去重
3.7.1 数据传递语义
3.7.2 幂等性
1)幂等性原理
2)如何使用幂等性
开启参数 enable.idempotence 默认为 true,false 关闭。
3.7.3 生产者事务
1)Kafka 事务原理
2)Kafka 的事务一共有如下 5 个 API
3.8 生产经验——数据有序
3.9 生产经验——数据乱序