Kafka学习

1. 消息队列

1.1 消息队列的作用

1.1.1 异步

可以结合快递员、消费者、菜鸟驿站来理解,菜鸟驿站就相当于是一个消息队列。这样做的好处是可以提高系统的响应速度、吞吐量。异步秒杀下单。

1.1.2 解耦

可以结合书本作者、读者、编辑部之间的关系来理解,比如说一本数是英文的,中国人看肯定是看中文得劲,法国人看肯定是法语得劲,但是作者也只会一种语言,也没必要去写不同语言的书,那么这个活就交给编辑部。消息队列就类似于编辑部,实现了不同服务之间的解耦减少了服务之间的影响,提高系统整体的稳定性以及可扩展性。

1.1.3 削峰

可以结合长江的水流来理解,每年长江都会有一段时间涨水,但是下游出水口的速度都是稳定的,如果不稳定,那么下游的百姓就会受难。所以就修理三峡大坝,把水存储起来,下游慢慢排水。所以消息队列的作用就是以稳定的系统资源应对突发的流量冲击。

1.1.4 实时日志处理

1.2 消息队列的模式

1.2.1 点对点模式

1.2.2 发布订阅模式

2. kafka特点

3. kafka集群

在单机服务下,kafka已经具备了非常高的性能,TPS能够达到百万级别,但是在实际工作使用时,单机搭建的kafka会有很大的局限性。

一方面:消息太多,需要分开保存。kafaka是面向海量消息设计的,一个Topic下的消息会非常多,单机服务很难存得下来.这些消息就需要分成不同的Partition,分布到多个不同的Broker上,这样每个Broker就只需要保存一部分数据。

另一方面:服务不稳定,数据容易丢失 。单机服务下,如果服务崩溃,那么消息就会丢失。但是为了保证数据安全,就给每个Partition配置一个或者多个备份,保证数据不丢失。也是主从分离,数据同步的形式进行,主节点负责响应客户端请求,从节点负责从主节点同步数据。

每个Broker之间应该知道彼此有哪些数据,因为不同Broker可能存储的是同一个Partition的数据,所以为了保证彼此之间知道对方的数据,就建立一个注册中心,即Zookeeper。

3.1 kafka集群搭建

4. kafka基础操作

4.1 创建topic

Kafka中所有消息都是保存在topic中,要生产消息到kafka中,首先必须要有一个确定的主题。

4.2 生产消息到Kafka

4.3 从Kafka消费消息

5. Java编程操作Kafka

5.1 同步生产消息到Kafka中

5.2 消费者消费消息

5.3 生产者使用异步方式生产消息

6. Kafka概念

1. broker

一个Kafka的集群通常由多个broker组成,这样才能实现负载均衡,以及容错。

broker是无状态的,他们是通过Zookeeper来维护集群状态。

一个Kafka的broker每秒可以处理数十万次读写,每个broker都可以处理TB消息而不影响性能。

2. zookeeper

zookeeper用来管理和协调broker,并且存储了Kafka的元数据,例如:有多少topic,partition、consumer。

zookeeper服务主要用于通知生产者和消费者Kafka集群中有新的broker加入、或者kafka集群中出现故障的broker。

3. producer生产者

生产者负责将数据推送给broker的topic。

4. consumer消费者

消费者负责从broker的topic中拉取数据,并自己进行处理。

5. consumer group消费者组

6. partition分区

7. replication副本

8. topic主题

9. offset偏移量

7. Kafka幂等性

7.1 概念

拿Http举例来说,一次或多次请求,得到的响应是一致的,换句话说,就是执行多次操作与执行一次操作的影响是一样的。

7.2 Kafka生产者幂等性

**生产者重复问题:**在生产者生产消息到partition,如果直接发送消息,kafka会将消息保存到分区中,但是kafka会返回一个ack给生产者,表示当前操作是否成功,是否已经保存了这条消息。如果ack响应的过程失败了,此时生产者就会重试,继续发送没有发送成功的消息,kafka又会保存一条一模一样的消息。

在Kafka中可以配置幂等性。

7.3 幂等性原理

**原理:**当Kafka开启幂等性后,在生产者生产消息时,会增加一个pid(生产者的唯一编号)和sequence number(针对消息递增的一个序列)。当生产者发送消息时,会连着pid和dequence number一起发送。Kafka接收到消息时,会将消息和pid、sequence number一起保存下来,如果ack响应失败了,生产者将重试。再次发送消息时,kafka会根据pid、sequence number判断是否需要再保存一条消息。就是通过判断生产者发送过来的sequence number是否小于等于partition中消息对应的sequence number,如果小于等于,就说明这个消息已经保存了。

8. 分区和副本机制

8.1 生产者分区写入策略

8.1.1 轮询策略

是在写入数据时没有key时,才会默认使用轮询策略。如果有key就是按key分区策略了。

8.1.2 随机策略(不用)

8.1.3 按key分配策略

8.1.4 乱序问题

在Kafka中,使用轮询策略和随即策略生产者写入数据时,当存在多个分区时,那么数据是分散在不同的partition中,数据是全局乱序的,但是在局部partition是有序的。如果只有一个分区,那就是有序的。而使用按key分配策略可以在一定程度上解决这个问题,但是该策略容易导致数据不一致,那就失去了kafka分布式的意义。

8.2 消费者组的Rebalance机制

8.2.1 什么是Rebalance机制?

在某些情况下,消费者组中的消费者消费分区发生变化时,会导致消费者分配不均匀,就会触发消费者组的Renalance机制,进行再均衡。

8.2.2 触发时机

消费者数量发生变化、topic数量发生变化(如删除了某个正在监听的topic)、partition的数量发生变化。

8.2.3 不良影响

当发生Rebalance时,所有的consumer将停止工作,共同参与再均衡,直到每个消费者都已经被分配到所需的分区,即Rebalance结束。

8.3 消费者分区分配策略

8.3.1 Range范围分配策略

时Kafka默认的。

8.3.2 RoundRobin轮询策略

逐个分配,分配完一轮后,再从第一个消费者开始。

8.3.3 Stricky粘性分配策略

相关推荐
DemonAvenger3 天前
Kafka性能调优:从参数配置到硬件选择的全方位指南
性能优化·kafka·消息队列
初次攀爬者3 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习