Kafka面试题

1.生产者

1.1 消息丢失

  • acks=0或者1
  • 未启用重试机制
  • 对失败消息没做处理

如何防止消息丢失?

  • 配置acks=all: 确保消息在分区的所有同步副本(ISR副本: Leader + Follower)都成功收到后,才向生产者确认。

    • 存在的问题: Broker在处理消息时遇到临时故障,例如某个副本不可用,此时会向生产者返回一个错误响应。如果生产者没有重试机制,那么在收到错误响应后,生产者可能会直接丢弃该消息,从而导致消息丢失。
  • 启用重试机制: 生产者在遇到临时故障时会自动重试发送消息

    • 作用: 主要是为了解决短暂的、可以在短时间内恢复的故障(临时故障、网络波动、副本重启、临时资源不足等)。
    • 存在的问题: 当重试次数达到设定的最大重试次数后,如果消息仍然无法成功发送,消息就会被丢弃,从而导致消息丢失。
  • 监控失败消息: 生产者可以通过实现Callback接口,在消息发送成功或失败时执行特定的逻辑。这种方法允许生产者在消息发送失败后执行自定义的处理逻辑,从而进一步减少消息丢失的风险。

1.2 消息重复发送

  • 网络问题: 网络延迟或中断可能导致生产者在发送消息时未收到Broker的确认(ACK),即使Broker已经成功接收并存储了消息。生产者会认为发送失败,并重新发送消息,导致消息重复。
  • 生产者重试机制: 当生产者没有收到Broker的确认时,它会根据配置的重试策略自动重试发送。每次重试都可能导致消息被重复发送。
  • Broker故障: 如果Broker在消息处理后但在返回确认之前崩溃,生产者未能收到确认,可能会重发消息,导致Broker在恢复后收到重复的消息。
  • 重启或故障恢复: 如果生产者在发送消息过程中发生崩溃或重启,可能会在恢复后重发之前的消息,导致重复。

如何防止消息被重复发送?

  • 启用幂等性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值