kafka生产者Producer参数设置及参数调优建议-商业环境实战系列
1. Producer核心工作流程
- Producer首先使用用户主线程将待发送的消息封装进一个ProducerRecord类实例中。
- 进行序列化后,发送给Partioner,由Partioner确定目标分区后,发送到Producer程序中的一块内存缓冲区中。
- Producer的另一个工作线程(即Sender线程),则负责实时地从该缓冲区中提取出准备好的消息封装到一个批次的内,统一发送给对应的broker中。
2. producer 主要参数设置
在消息被认为是“已提交”之前,producer需要leader确认的produce请求的应答数。该参数用于控制消息的持久性,目前提供了3个取值:
acks = 0: 表示produce请求立即返回,不需要等待leader的任何确认。这种方案有最高的吞吐率,但是不保证消息是否真的发送成功。
acks = -1: 表示分区leader必须等待消息被成功写入到所有的ISR副本(同步副本)中才认为produce请求成功。这种方案提供最高的消息持久性保证,但是理论上吞吐率也是最差的。
acks = 1: 表示leader副本必须应答此produce请求并写入消息到本地日志,之后produce请求被认为成功。如果此时leader副本应答请求之后挂掉了,消息会丢失。这是个这种的方案