Kafka丢数据的场景


发布于 2024-03-20 / 62 阅读 / 0 评论 /
kafka作为一个数据中间件,虽然不能当成数据库来使用,但是中间会保存一段时间的数据,如果操作不善,可能导致数据丢失。

kafka作为一个数据中间件,虽然不能当成数据库来使用,但是中间会保存一段时间的数据,如果操作不善,可能导致数据丢失。

主要有以下几种情况。

磁盘损坏无法恢复

磁盘损坏是最常见的情况,具体有以下两个场景:

如果说我们的topic副本数为1,当消费者还没有消费完这个分区所有的数据,如果此时发生磁盘损坏,且无法恢复的情况,那么剩余未被消费的数据就永久丢失了。

如果我们的topic副本数大于1,当磁盘损坏且无法恢复时,所有分区leader副本在该磁盘上,且没有follower副本追上leader副本的情况下,则leader和follower之间的数据gap就永久丢失了。这种情况有一种解决方案,那就是生产者开启事务,把所有的副本都写完才算消息生产完成。

消费端自动提交丢失数据

这种情况出现在消费者自动提交的场景中,比如消费者消费了一批数据,正在进行业务逻辑处理时,消费者客户端自动提交了offset,此时kafkabroker认为当前消费已完成,但消费者却没有完成,而是正在处理,如果此时消费者宕机,则未被处理的数据就会被丢失。