侧边栏壁纸
博主头像
ZHD的小窝博主等级

行动起来,活在当下

  • 累计撰写 79 篇文章
  • 累计创建 53 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Kafka 如何保证消息不丢失,应该如何配置

江南的风
2022-07-21 / 0 评论 / 0 点赞 / 22 阅读 / 2070 字 / 正在检测是否收录...

Kafka 通过多种机制来确保消息不丢失,主要包括以下几点:

  1. 副本机制:Kafka 可以为每个主题分区创建多个副本。即使某个副本因故障不可用,其他副本仍然可以提供服务。

  2. 消息确认机制:通过配置 acks 参数,可以控制生产者在消息的发布过程中的确认策略。该参数的取值有:

    • acks=0:生产者不等待任何确认,消息发送后即认为成功(消息丢失风险最大)。

    • acks=1:生产者会等待主副本确认接收到消息(提高了保证但仍然有丢失的风险)。

    • acks=all(或 acks=-1):生产者会等待所有副本都收到消息后才返回确认,这是保证消息不丢失的最佳方式,虽然会引入延迟。

  3. 数据持久化:Kafka 将消息持久化到磁盘,避免因系统崩溃导致数据丢失。

  4. 配置 retries:可以通过设置 retries 参数定义生产者在消息发送失败时的重试次数,增加了消息发送的可靠性。

结合你提供的代码片段,如果希望增强消息的可靠性,可以将 acks 设置为 all,并确保适当配置 retries 和分区的副本数。这样的配置将显著降低消息丢失的风险。

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
</dependency>
spring:
    kafka:
    bootstrap-servers: 
    producer:
      topic:
        topicOne: order_status_change_topic
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      batch-size: 1000
      acks: all
      retries: 3
      compression-type: lz4

0

评论区