Kafka 通过多种机制来确保消息不丢失,主要包括以下几点:
副本机制:Kafka 可以为每个主题分区创建多个副本。即使某个副本因故障不可用,其他副本仍然可以提供服务。
消息确认机制:通过配置
acks
参数,可以控制生产者在消息的发布过程中的确认策略。该参数的取值有:acks=0
:生产者不等待任何确认,消息发送后即认为成功(消息丢失风险最大)。acks=1
:生产者会等待主副本确认接收到消息(提高了保证但仍然有丢失的风险)。acks=all
(或acks=-1
):生产者会等待所有副本都收到消息后才返回确认,这是保证消息不丢失的最佳方式,虽然会引入延迟。
数据持久化:Kafka 将消息持久化到磁盘,避免因系统崩溃导致数据丢失。
配置 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
评论区