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。

  • 相关阅读:
    [团队项目] Scrum 项目 3.0 SCRUM 流程的步骤2: Spring 计划
    《构建之法》第6-7章读后感
    【操作系统】实验二 作业调度模拟程序
    团队项目2.0软件改进分析MathAPP
    团队项目
    结对编程2.0
    电影(网剧))项目
    实验0 了解和熟悉操作系统
    复利计算
    学习进度条
  • 原文地址:https://www.cnblogs.com/java-meng/p/15211455.html
Copyright © 2011-2022 走看看