文章目录

  • 概述
  • AckMode源码解读
    • 自动提交设置
    • 手工提交设置
  • 最佳实践


概述

Apache Kafka-消息丢失分析 及 ACK机制探究


我们这里配了个manual, 为啥子嘛


AckMode源码解读

我们来看下 Spring Kafka封装的ACK

ContainerProperties#AckMode

 /*** The offset commit behavior enumeration.*/public enum AckMode {/*** Commit after each record is processed by the listener.*/RECORD,/*** Commit whatever has already been processed before the next poll.*/BATCH,/*** Commit pending updates after* {@link ContainerProperties#setAckTime(long) ackTime} has elapsed.*/TIME,/*** Commit pending updates after* {@link ContainerProperties#setAckCount(int) ackCount} has been* exceeded.*/COUNT,/*** Commit pending updates after* {@link ContainerProperties#setAckCount(int) ackCount} has been* exceeded or after {@link ContainerProperties#setAckTime(long)* ackTime} has elapsed.*/COUNT_TIME,/*** User takes responsibility for acks using an* {@link AcknowledgingMessageListener}.*/MANUAL,/*** User takes responsibility for acks using an* {@link AcknowledgingMessageListener}. The consumer* immediately processes the commit.*/MANUAL_IMMEDIATE,}

自动提交设置

  • RECORD

每条消息被消费完成后,自动提交

  • BATCH

每一次消息被消费完成后,在下次拉取消息之前,自动提交 (默认模式)

  • TIME :

达到一定时间间隔后,自动提交, 并不是一到就立马提交,如果此时正在消费某一条消息,需要等这条消息被消费完成,才能提交消费进度

  • COUNT

消费成功的消息数到达一定数量后,自动提交 ,它并不是一到就立马提交,如果此时正在消费某一条消息,需要等这条消息被消费完成,才能提交消费进度

  • COUNT_TIME

TIME 和 COUNT 的结合体,满足任一都会自动提交。


手工提交设置

  • MANUAL

调用时,先标记提交消费进度。等到当前消息被消费完成,然后在提交消费进度。

  • MANUAL_IMMEDIATE

调用时,立即提交消费进度。


最佳实践

那应该怎么配置呢

  • 配置 spring.kafka.consumer.enable-auto-commit为true, spring.kafka.consumer.auto-commit-interval 设置自动提交的频率 , 举个例子 自动提交,批量拉去了一波,还没消费完,你就提交了,这给时候如果消费者挂了,消息丢失。。。

  • 配置 spring.kafka.consumer.enable-auto-commit为false , spring.kafka.listener.ack-mode 设置具体模式,结合具体情况。 有可能重复消费,注意幂等性的判断

  • 另外,spring.kafka.listener.ack-time 和 spring.kafka.listener.ack-count 可以设置自动提交的时间间隔和消息条数

总而言之,没有标准答案,需要进行trade off ,权衡一下

嗨 ,你这不是诶说么。。。。


Apache Kafka-AckMode最佳实践相关推荐

  1. [实战系列]SelectDB Cloud Kafka Connect 最佳实践张家锋

    概述 企业正在经历其数据资产的爆炸式增长,这些数据包括批式或流式传输的结构化.半结构化以及非结构化数据,随着海量数据批量导入的场景的增多,企业对于 Data Pipeline 的需求也愈加复杂.新一代 ...

  2. 大规模使用 Apache Kafka 的20个最佳实践

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 本文来源:朱小厮的博客 配图来源:<深入理解Kafka> Apache Kafka是一款流 ...

  3. Apache Kafka: 优化部署的10个最佳实践

    原文作者:Ben Bromhead      译者:江玮 原文地址:https://www.infoq.com/articles/apache-kafka-best-practices-to-opti ...

  4. 消息中间件学习总结(5)——RocketMQ之Apache RocketMQ背后的设计思路与最佳实践

    摘要:为了更好地让开发者们更加深入了解阿里开源,阿里云云栖社区在3月1号了举办"阿里开源项目最佳实践"在线技术峰会,直播讲述了当前阿里新兴和经典开源项目实战经验以及背后的开发思路. ...

  5. 聊聊 Kafka:Kafka 消息重复的场景以及最佳实践

    一.前言 上一篇我们讲了 聊聊 Kafka:Kafka 消息丢失的场景以及最佳实践,这一篇我们来说一说 Kafka 消息重复的场景以及最佳实践. 我们下面会从以下两个方面来说一下 Kafka 消息重复 ...

  6. rocketmq支持最大消息_分布式消息引擎Apache RocketMQ最佳实践

    1 Producer一个应用尽可能用一个Topic,消息子类型用tags来标识,tags可以由应用自由设置 只有发送消息设置了tags,消费方在订阅消息时,才可以利用tags在broker做消息过滤 ...

  7. 基于Canal+kafka监听数据库变化的最佳实践

    1.前言 工作中,我们很多时候需要根据某些状态的变化更新另一个业务的逻辑,比如订单的生成,成交等,需要更新或者通知其他的业务.我们通常的操作通过业务埋点.接口的调用或者中间件完成. 但是状态变化的入口 ...

  8. Pinterest基于AWS规模化使用Apache Kafka的实践经验

    在Pinterest,Apache Kafka被用于为实时流应用程序传输数据.记录日志和可视化监控指标.Pinterest的Kafka托管在AWS上,为了实现复制和高可用性,其安装使用了MirrorM ...

  9. 超详细 kafka 入门(最佳实践)

    今日推荐6年,终拿腾讯 offer! 都2021年了,你还在用Jenkins?赶快看看这些替代方案吧! 盘点 12 个 GitHub 上的高仿项目 CTO 说了,用错 @Autowired 和 @Re ...

最新文章

  1. Freescale 基于IMX536处理器的Dialog DA9053电源管理参考设计
  2. Autodesk Maya 2019中文版
  3. axios获取图片显示_vue中使用axios post上传头像/图片并实时显示到页面的方法
  4. HBase原理-要弄懂的sequenceId
  5. 通过Ajax解析和jQuery写了一个小小的导航条
  6. python list存储方式_python list存储
  7. 那个拒绝北大教授,却坚持留在美国做服务员的数学天才,现状如何
  8. 主内存和工作内存交互
  9. 分手纪念网页-分手了就用这个看看吧(移动端)
  10. 显卡升级测试软件,Shader Model 5.0显卡测试工具 显卡升级测试工具
  11. NTFS(文件恢复)最简单情况
  12. 英语作文计算机的利弊,电脑游戏的坏处英语作文
  13. 谷歌身份验证器 手表_6条使您的三星手表更加Google-y的提示
  14. datastage作业hang住
  15. getsockopt套接口选项
  16. 《the culture code》
  17. 鸡肋功能2————将汉字转化为拼音(带声调)
  18. 输出自新中国成立以来至今所有的闰年年份。
  19. Modelsim编译报错“(vlog-2401) Extra semicolon found. This is permitted in SystemVerilog, but not permitt”
  20. php推广网址代码生成,PHP网址缩短代码(生成短网址)

热门文章

  1. 2014年电大计算机应用基础网考试题,2017年电大计算机应用基础网考试题与答案...
  2. 微型计算机中数据总线既可以传输数据信息,计算机考试题库精简版
  3. 从postgress 读取数据
  4. python DataFrame join()
  5. matlab 开 闭 代码,C++中的MATLAB函数〔闭锁〕
  6. linux 可执行文件_linux中ELF二进制程序解析
  7. 93. Leetcode 64. 最小路径和 (动态规划-路径规划)
  8. 1. Leetcode 1. 两数之和 (数组-双向双指针)
  9. 搭建Keras,TensorFlow运行环境
  10. 线性代数笔记: Cholesky分解