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。

  • 相关阅读:
    [转]MYSQL5.7版本sql_mode=only_full_group_by问题
    [坑]Linux MySQL环境表名默认区分大小写
    [转]CentOS 7.3 安装MySQL
    [转]Oracle截取字符串相关函数
    服务相关
    CSRF攻击
    sqlalchemy——多表操作
    sqlalchemy——基本操作
    高可用——网站运行监控
    高可用——软件质量保证
  • 原文地址:https://www.cnblogs.com/java-meng/p/15211455.html
Copyright © 2011-2022 走看看