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。

  • 相关阅读:
    H公司以及我的目标
    新的起点
    apache服务器配置Net的实践
    会计简要学习
    二、MongoDB的简单增删改查
    一、MongoDB安装与启动
    KnockOutJs初次体验
    DevExpress 全体窗口换肤的功能 winform
    DevExporess 右键菜单的实现
    使用gridControl gridview总结
  • 原文地址:https://www.cnblogs.com/java-meng/p/15211455.html
Copyright © 2011-2022 走看看