首页 > 其他分享 >Kafka 中一些常见的问题

Kafka 中一些常见的问题

时间:2024-01-25 23:24:30浏览次数:30  
标签:Consumer 常见 Kafka 消息 Offset 一些 数据 丢失

消息消费的顺序问题

消息在被追加到 Partition 的时候都会分配一个特定的偏移量(offset),Kafka 通过偏移量(offset)来保证消息在分区内的顺序性。为了保证 Kafka 中消息消费的顺序,可以采用以下 2 种方法:

  • 设置 1 个 Topic 只对应一个 Partition

    破坏了 Kafka 的设计初衷,不推荐使用。

  • 发送消息的时候指定 key

    同一个 key 的消息可以保证只发送到同一个 Partition。

提升:如何保证消息的顺序性?

消息丢失问题

Producer 丢失数据

如果 Producer 端设置了 acks=all,则不会丢失数据。

Leader 在所有的 Follower 都同步到了消息之后,才认为本次写成功。如果没满足这个条件,生产者会进行无限次重试。

Consumer 丢失数据

默认情况下,Kafka 会自动提交 Offset,Kafka 认为 Consumer 已经处理消息了,但是 Consumer 可能在处理消息的过程中挂掉了。重启系统后,Consumer 会根据提交的 Offset 进行消费,也就丢失了一部分数据。

解决:关闭自动提交 Offset,在处理完之后自己手动提交 Offset,就可以保证数据不会丢失。但可能会存在消息重复消费问题。

Broker 丢失数据

比较常见的一个场景:Kafka 某个Leader 所在的 Broker 宕机,需要重新选举新的 Leader ,但此时其他的 Follower 部分数据尚未同步完成,选举某个 Follower 成 Leader 后就丢失一部分数据。

所以此时一般设置如下 4 个参数:

  • Topic 设置 replication.factor 参数

    参数值必须大于 1,要求每个 Partition 必须有至少 2 个副本。

  • Kafka 服务端设置 min.insync.replicas 参数

    参数值必须大于 1,要求每个 Partition 必须有至少 2 个副本。

  • Producer 设置 acks=all

    要求每条数据,必须是写入所有副本,才认为写成功

  • Producer 端设置 retries=MAX

    MAX 即是一个超级大的数字,表示无限次重试。retries=MAX 要求一旦写入数据失败,就无限重试。

消息重复消费问题

Consumer 消费了数据后,每个一段时间,会将已消费过的消息的 Offset 进行提交,这样,重启后,可以继续从上次消费过的 Offset 来继续消费。测试时,直接 kill 进程,然后再重启后,会导致 Consumer 将有些消息处理了,但是还未来得及提交 Offset,重启后,少数消息会再消费一次。

解决:需要结合具体业务来思考,可从以下几个思路来考虑:

  • 如果要将数据写入数据库中,先根据主键查查询,如果这数据已存在,就不用插入数据了。
  • 向 Redis 中写入数据,可以使用 set,这样数据不会重复
  • 基于数据库的唯一键来保证重复数据不会重复插入多条。因为有唯一键约束了,重复数据插入只会报错,不会导致数据库中出现脏数据。

参考:

标签:Consumer,常见,Kafka,消息,Offset,一些,数据,丢失
From: https://www.cnblogs.com/i9code/p/17988403

相关文章

  • Kafka 的高可用原理
    Kafka集群由若干个Broker组成,Topic由若干个Partition组成,每个Partition可存在不同的Broker上。可以这样说,一个Topic的数据,分散在多个机器上,即每个机器上都存放一部分数据。Kafka0.8以前Kafka0.8以前是没有高可用机制的。假设一个Topic,由3个Partiton组成。......
  • Kafka 特性总结
    Kafka特性可总结如下:1.高可用Kafka0.8以前是没有高可用机制的。Kafka0.8以后,通过副本机制来实现高可用,基于副本机制实现Kafka的高可用。2.持久性Kafka集群接收到Producer发过来的消息后,将其持久化到磁盘。此外,还支持数据备份。3.数据不易丢失通过合理的配置,Ka......
  • LVS常见面试题
    一、Linux集群有哪些Linux集群主要有以下几种类型:负载均衡集群(LoadBalancingCluster,LB)这种类型的集群主要用于分发网络流量,确保服务的稳定性和高效性。它将客户端的请求分配给后端的一组服务器,以平衡整体负载,并防止任何单个服务器过载。常见的软件实现包括LinuxVirtualSer......
  • # yyds干货盘点 # 盘点一个Pandas中.str的一个常见小误区
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas基础的问题。问题如下:大佬们,这里面的dtype,能直接改成str格式?我一开始认为只能这么看print(df.dtypes),传统的做法我一直认为是这样子df['数学']=df['数学'].astype(str),不明白,上面这部,跟这部df['数......
  • 盘点一个Pandas中.str的一个常见小误区
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas基础的问题。问题如下:大佬们,这里面的dtype,能直接改成str格式?我一开始认为只能这么看print(df.dtypes),传统的做法我一直认为是这样子df['数学']=df['数学'].astype(str),不明白,上面这部,跟这部df['......
  • sql自学笔记(三)常见函数
    select函数名(实参列表)from表concat拼接将姓变大写,名变小写,然后拼接>selectconcat(upper(last_name),lower(first_name))姓名fromemployeessubstr/substring截取子串selectsubstr('我爱上你',2)截取从指定索引处后面所有字符,sql索引从1开始selectsubs......
  • openGauss学习笔记-207 openGauss 数据库运维-常见故障定位案例-btree 索引故障情况下
    openGauss学习笔记-207openGauss数据库运维-常见故障定位案例-btree索引故障情况下应对策略207.1btree索引故障情况下应对策略207.1.1问题现象偶发索引丢失错误,报错如下。ERROR:index'xxxx_index'containsunexpectedzeropage或ERROR:index'pg_xxxx_index'cont......
  • 关于鸿蒙系统开源和技术细节的一些探讨
    1月18日在深圳举办了“鸿蒙生态千帆启航仪式”,这也是华为鸿蒙开启生态进阶的信号。在政策的叠加下,鸿蒙未来必定是势不可挡的。我们这些程序员也得与时俱进,熟悉鸿蒙的技术和细节,别在经济寒冬里被淘汰了。官方称HarmonyOSNEXT开发者预览版将在2024年第一季度面向开发者开放。202......
  • c# .Net 常见算法
    1usingSystem.Collections.Generic;2usingSystem.ComponentModel.Design;3usingSystem.Linq;45namespaceTestDelay6{7internalclassProgram8{9staticvoidMain()10{11int[]arry=new......
  • idea maven sprint boot打包常见问题
    ideaSpringBoot多模块打包(Unabletofindmainclass和父子依赖打包的错误) 1、子模块打包没有main方法就不要用spring-boot-maven-plugin来build了,因为它是需要main方法才能打包的<!--使用springboot的maven插件会报找不到主类错误--><build><plugins>......