kafka如何保证生产者不丢失数据,消费者不丢失数据

生产者:

kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到,其中状态有0,1,-1

(1)最多一次(AT_MOST_ONCE): 消息不会被重复发送,最多被传输一次,但也 有可能一次不传输
(2)最少一次(AT_LEAST_ONCE): 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.
(3)精确的一次(EXACTLY_ONCE): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的

如果是0 ,那么代表发送过去,不等待kafka消息确认,认为成功,一定会丢失消息,可能kafka集群正在选举,此时就无法收到任何异常
如果是1,那么代表发送过去,等待首领副本确认消息,认为成功首领肯定收到了消息,写入了分区文件(不一定落盘)
如果是all, 那么代表发送过去之后,消息被写入所有同步副本之后 ,认为成功
注意这里是 所有同步副本,不是所有副本。 具体是多少同步副本,还要取决于kafka集群设置的最小同步副本数,和集群当前的同步副本数
选择这种配置,会可靠,但是牺牲效率,可以通过,增大批和使用异步模式,提高效率
异步模式下的有个buffer,通过buffer来进行控制数据的发送,有两个值来进行控制,时间阈值与消息的数量阈值,如果buffer满了数据还没有发送出去,有个选项是配置是否立即清空buffer。可以设置为-1,永久阻塞,也就数据不再生产

消费者:

通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费
Broker端
设置unclean.leader.election.enable为false,禁止非ISR列表中的副本参与分区首领副本选举

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值