Apache Kafka-AckMode最佳实践

简介: Apache Kafka-AckMode最佳实践

20191116123525638.png

概述

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

202102191718409.png


我们这里配了个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 ,权衡一下


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

相关文章
|
3月前
|
消息中间件 监控 Java
Apache Kafka 分布式流处理平台技术详解与实践指南
本文档全面介绍 Apache Kafka 分布式流处理平台的核心概念、架构设计和实践应用。作为高吞吐量、低延迟的分布式消息系统,Kafka 已成为现代数据管道和流处理应用的事实标准。本文将深入探讨其生产者-消费者模型、主题分区机制、副本复制、流处理API等核心机制,帮助开发者构建可靠、可扩展的实时数据流处理系统。
347 4
|
5月前
|
消息中间件 存储 监控
Apache Kafka 3.0与KRaft模式的革新解读
在该架构中,Kafka集群依旧包含多个broker节点,但已不再依赖ZooKeeper集群。被选中的Kafka集群Controller将从KRaft Quorum中加载其状态,并在必要时通知其他Broker节点关于元数据的变更。这种设计支持更多分区与快速Controller切换,并有效避免了因数据不一致导致的问题。
|
消息中间件 安全 Kafka
Apache Kafka安全加固指南:保护你的消息传递系统
【10月更文挑战第24天】在现代企业环境中,数据的安全性和隐私保护至关重要。Apache Kafka作为一款广泛使用的分布式流处理平台,其安全性直接影响着业务的稳定性和用户数据的安全。作为一名资深的Kafka使用者,我深知加强Kafka安全性的重要性。本文将从个人角度出发,分享我在实践中积累的经验,帮助读者了解如何有效地保护Kafka消息传递系统的安全性。
803 7
|
8月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
203 0
优化 Apache 日志记录的 5 个最佳实践
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
618 5
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
455 1
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
210 0
|
11月前
|
消息中间件 存储 缓存
kafka 的数据是放在磁盘上还是内存上,为什么速度会快?
Kafka的数据存储机制通过将数据同时写入磁盘和内存,确保高吞吐量与持久性。其日志文件按主题和分区组织,使用预写日志(WAL)保证数据持久性,并借助操作系统的页缓存加速读取。Kafka采用顺序I/O、零拷贝技术和批量处理优化性能,支持分区分段以实现并行处理。示例代码展示了如何使用KafkaProducer发送消息。
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
469 1

推荐镜像

更多