zoukankan      html  css  js  c++  java
  • 深入理解Kafka-学习笔记03-消息有序性

      Kafka只能保证分区内消息有序,为了保证有序性,在acks配置非零的前提下,需指定max.in.flight.requests.per.connection(每个连接最多缓存的请求数)为1,保证前一个消息发送成功,后一个消息才开始发送;如果acks配置为0,那么生产者发送消息之后不需要等待任何服务端的响应,推送失败消息就丢失了,也不会有乱序的问题。
      那么max.in.flight.requests.per.connection大于1时怎么保证消息有序,需要开启幂等(设置enable.idempotence为true开启)。请注意,启用幂等性需要确保 max.in.flight.requests.per.connection小于或等于5,retries 大于等于0,并且ack必须设置为all。

    对于为什么官方文档写着启用幂等性需要确保 max.in.flight.requests.per.connection小于或等于5呢?

     是由于幂等性相关代码中有个ProducerStateEntry实体,用于存储每个producerId对应的Batch,并且只能固定缓存5个BatchMetadata。若max.in.flight.requests.per.connection设为大于5的话,有可能会造成某一批次的元数据被挤出缓存,如果该批次又发生重试,就会因为永远找不到其对应的BatchMetadata。

  • 相关阅读:
    PCRE
    [转]如何解决严重的拖延症
    linux系统编程:setjmp和longjmp函数用法
    AWK中几个变量
    关于fork函数
    go mod
    golang+read_file+call_shell+goroutine
    vim for galang
    Linux install go
    为Git branch 打Tag
  • 原文地址:https://www.cnblogs.com/java-meng/p/15211455.html
Copyright © 2011-2022 走看看