Kafka内容相关
创始人
2024-04-02 10:21:48
0

Kafka能做什么?

        作为消息中间件,削峰

Kafka的工作流程

        topic 消息的分类

        partition 分区

        offset 分区里的位置,从0开始。

        副本        leader,follower

        生产者产生消息后,发送到broker,不同的消息存放的不同的topic里面,同一topic下面会有好几个分区,在同一分区内的消息是有序的,用offset记录当前分区消费的位置。不同分区内的消息是无序的。消息会写到leader里面,再把数据同步到follower里面。同一个topic的partition可以在不同的broker里面。一个分区只能被一个消费者消费。可以将消费者分组,同一个消费者组里的消费模式是队列模式,A消费了,B就不会消费。不同消费者组的消费者消费模式为发布订阅模式,每一个消费者组都可以订阅到消息,有消息来就分发给不同的消费者组。

Kafka如何避免消息积压?

本质原因是生产者生产速度过快,消费者速度过慢。

解决办法是:

        如果说是生产者生产数据过快,可以隔一段时间发送一批数据到broker,调整该时间。在消费者端则有可能是消息处理速度慢,慢的原因则可能是业务处理慢,尽量减少业务逻辑的处理,只存表,另起一个线程去做复杂业务的处理。也可能是表被上了行锁,表锁等,检查业务SQL对表的更新,插入等语句是否有造成大量的锁竞争。

Kafka如何避免消息重复消费?

        成因1:broker 或 consumer宕机了,没有及时将offset提交到broker,导致消息重复下发。

        解决方案:1.保存库表的时候设置主键,重复数据数据库拒绝录入。2.使用Redis中间件,将消费过的数据存入Redis,每次判断是否有消费过。

        成因2:reblance的问题。如果consumer端在默认的5分钟内没有处理完这一批消息,就会触发kafka的reblance机制,导致提交offset失败。在reblance后,consumer会自动从没有提交之前的位置进行消费。

        解决方案:设置每次拉取下来的数据量少一点。调整消费端处理的超时时间。提高消费端的处理能力。

        

Kafka如何避免消息丢失?

        成因1:消息丢失有producer发送失败。producer发送消息是异步发送的

        解决方法:1.该成同步发送,实时知道发送消息的结果。2.添加异步发送回调函数监听消息发送的结果,对发送失败的做重试。3.producer自动重试参数retries.

        成因2:broker leader节点宕机或者网络超时时,数据未及时同步到follower节点,或者producer仍旧在往老的master里面写数据。导致从follower节点选举产生的leader节点中不包含该数据,旧leader节点恢复通信后,发生脑裂现象,由于新的leader的epoch ID更大,会使用新的leader作为leader,旧leader会降级未follwer,旧的leader数据会被新的leader数据覆盖,导致数据丢失。

        解决方法:在producer发送时设置一个参数acks=1(只需要一个副本确认了就给producer发送成功确认).acks=0(不需要等待副本确认就可以给producer发送成功)acks=-1(需要所有的副本确认才能给producer发送成功)

        成因3:consumer消费失败。如数据库问题存储失败,业务处理异常等。

Kafka如何保证消息顺序消费?

        成因:一个topic下面有好几个分区,每个分区的数据都是有序的,但跨分区则是无序的。

        解决方法:

                1.自定义消息落到分区的路由算法。消息落到分区是根据消息的key进行取模,落到不同的分区里面,按照先后顺序进行存储。按照这个特性,自定义一个路由算法,把指定的key都发送到一个分区里面,然后指定某个消费者专门去消费某个分区的数据。

                2.有些consumer的设计会采用异步线程的方式来处理数据,这样也可能会出现一个数据的无序性消费。可以先把数据保存到阻塞队列里面,再用异步线程来消费阻塞队列里面的数据。

Kafka如何避免再平衡?

        造成问题:kafka在进行reblance时,会阻塞读写。

        成因:

                group里增加了consumer数量

                consumer消费超时

                topic内增加了partition数量

                group增加了topic数量

        可以理解为把未消费的消息重新分配到其它分区上面,可以被其它消费者给消费

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...