Kafka面试小结一:Kafka如何保证消息不丢失?

Kafka面试小结一:Kafka如何保证消息不丢失?_第1张图片

Kafka通过以下几种方式来保证消息不丢失:

  1. 异步发送改为同步发送:Kafka生产者默认使用异步发送消息,这意味着生产者会立即继续执行后续操作,而不等待消息发送的结果。但是,为了确保消息不丢失,可以将异步发送改为同步发送,以便生产者可以实时知道消息发送的结果。
  2. 添加异步回调函数:除了将异步发送改为同步发送,Kafka还支持添加异步回调函数来监听消息发送的结果。如果发送失败,可以在回调函数中重试。
  3. 提供回调参数retries:Kafka生产者本身提供了一个retries的机制。如果由于网络问题、broker故障等原因导致发送失败,生产者可以重试。
  4. Broker端持久化消息到磁盘:Kafka broker端通过将消息持久化到磁盘来确保发送来的数据不丢失。然而,Kafka采用的是异步批量存储到磁盘的机制,具有一定的消息量和时间间隔要求。如果在刷盘之前系统崩溃,可能会导致数据丢失。
  5. acks参数保证数据不丢失:Kafka生产者可以通过设置acks参数来控制数据是否需要等待broker的响应。例如,当acks=0时,生产者不需要等待broker的响应就可以认定消息是发送成功的,这种情况可能会导致消息丢失。而当acks=1时,leader不需要等待副本的同步就可以认定消息是发送成功的,当leader挂掉时消息同样会丢失。当acks=-1时,leader收到消息并且所有副本都已经同步数据之后再认定消息发送成功,这样可以保证数据的可靠性。

在消费端,Kafka通常不会出现消息丢失的情况。如果发生消息丢失,可以调offset来实现消息的重新消费。以上信息仅供参考,可以查阅Kafka相关的文档和书籍获取更多信息。

你可能感兴趣的:(Kafka,面试题分享,MQ(Message,Queue)消息队列,内容分享,kafka,分布式)