Kafka常见面试题

1. Kafka消息可靠性传输/如何保证消息不丢失

在发送消息到消费者接收消息,每个阶段都可能会丢失消息,所以解决方案也是从多个方面考虑。

第一个是生产者发送消息的时候,可以使用异步回调发送,如果消息发送失败,可以通过回调获取失败后的消息信息,可以考虑重试或者记录日志,后面在做补偿就可以。同时在生产者这边还可以设置消息重试,有的时候是由于网络抖动的原因导致发送不成功,就可以使用重试机制来解决

第二个在broker中消息有可能会丢失。可以通过Kafka的复制机制来确保消息不丢失。在生产者发送消息的时候,可以设置一个acks,就是确认机制。我们可以设置参数为all,这样的话,当生产者发送消息到了分区之后,不仅仅只在leader区保存确认,在follwer区也会保存确认,只有当所有的副本都保存确认以后才算是成功发送了消息,所以,这样设置就很大程度上保证了消息不会在broker丢失。

第三个有可能是在消费者端丢失消息。Kafka消费消息都是按照offset进行标记消费的,消费者默认是自动按期提交已经消费的偏移量,默认是每隔5s提交一次,如果出现重平衡的情况,可能会重复消费或者丢失数据。一般会禁用掉自动提交偏移量,改为手动提交,当消费成功后再报告给broker消费的位置,这样就可以避免消息丢失和重复消费了。

2. Kafka如何防止消息重复消费/消息消费的幂等性

首先kafka的broker上存储的消息,都有一个offset标记,Kafka的消费者是通过offset标记来维护当前已经消费的数据,每消费一批数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值