kafka学习:Producer

Producer模型

Record Accumulator -> Send Thread -> Broker

KafkaProducer -> Interceptors -> WaitOnMetadata -> KVSerializer -> partioner -> Record Accumulator -> Sender Thread[drain -> sendProduceRequest -> NetworkClient -> KSelector] -> Kafka Broker

Producer配置

建议规范

1.若同步复制ack=all(-1),否则ack=1
2.retries=3 针对可重试异常自动发起重试的次数,默认值为0
3.linger.ms=0
4. Producer JVM内存要够,避免导致发送阻塞
5.callback函数不能阻塞,否则会阻塞sender线程

batch.size默认16384(16KB)推荐262144(256KB) 当batch.size超标或linger.ms超时发送消息

FIFO保序

  1. 指定partition
  2. 设置请求发送队列长度为1或关闭发送失败重试(至少配置其中一个)

max.in.flight.requests.per.connection 限制了生产者在等待之前发送的消息确认(ACK)时,可以同时向同一个 Broker 发送的未完成请求数量。
高值(如 5):允许生产者并行发送多个请求,提高吞吐量,但可能增加延迟(因需要等待多个 ACK)。
低值(如 1):确保消息按顺序发送和确认,降低吞吐量但保证顺序。
默认值为 5。
retries 针对可重试异常自动发起重试的次数,默认值为0

若启用重试且发送队列长度>1,则可能先发送的请求失败、后发送的请求成功、而后先发送的请求再次尝试并成功,从而乱序

高吞吐

topic配置 3分区2副本
acks=0 or 1

相对可靠

3分区3副本
#ISR=2 min.insync.replicas=2
acks=-1

高可靠

3分区3副本
#ISR=2 min.insync.replicas=2
flush.messages=1 强制刷新写入的最大缓存消息数
acks=-1

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信