kafka学习
1.安装
下载安装包
wget --no-check-certificate https://dlcdn.apache.org/kafka/3.1.0/kafka_2.12-3.1.0.tgz
解压缩
tar -zxvf kafka_2.12-3.1.0.gz
进入解压后的kafka文件,创建logs文件夹
mkdir logs
配置 修改 config/server.properties文件
#配置集群
zookeeper.connect=wl:2181,wyp:2181,zbc:2181
#配置数据路径
log.dirs=/home/wl/kafka_2.12-3.1.0/logs
配置环境变量并生效
vim /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/home/wl/kafka_2.12-3.1.0
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
将文件复制到其他两个集群中并同样配置环境变量
scp -r /home/wl/kafka_2.12-3.1.0 root@zbc:/home/wl/
scp -r /home/wl/kafka_2.12-3.1.0 root@wyp:/home/wl/
修改 config/server.properties文件中的broker.id
,使其唯一就行
三个服务器分别开启kafka
kafka-server-start.sh -daemon config/server.properties
2.使用kafka
kafka集群架构图
创建主题
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server wl:9092 --replication-factor 1 --partitions 4
- --partitions 4表示4个分区
- --replication-factor 1 表示一个副本
- --topic test-topic test-topic 表示主题名称
查看主题
bin/kafka-topics.sh --list --bootstrap-server wl:9092
查看某个Topic的详情
bin/kafka-topics.sh --bootstrap-server localhost:2181 --describe --topic test-topic
删除主题
bin/kafka-topics.sh --delete --topic test-topic --bootstrap-server wl:9092
发送消息
bin/kafka-console-producer.sh --broker-list wl:9092 --topic test
消费消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic
3.Kafka原理架构
1.工作流程
kafka的消息是以Topic(主题)进行分类的,但是Topic只是逻辑概念,partitions是物理概念 ,是真实存放的
打开分区,每个partitions都会对应一个log文件,这个文件就是存放producer生产的数据。
存储结构如下
index文件存储索引信息,用于对应数据文件中 message 的物理偏移地址,log文件主要存放大量数据
2.数据可靠性的保证
ack应答
为了确保 topic里面的每个partition 都能收到 producer(生产者)发送的数据,在partition收到数据后就会向producer发送ack(acknowledgement 确认收到)
副本同步策略
策略 | 优点 | 缺点 |
---|---|---|
半数以上完成同步,发送ack | 延迟低 | 选举新的 leader 时,容忍 n 台 节点的故障,需要 2n+1 个副 本 |
全部同步完成,发送ack | 选举新的 leader 时,容忍 n 台 节点的故障,需要 n+1 个副 本 | 延迟高 |
kafka采用的是第二种方式,并且使用了ISR来解决以下问题:
leader 收到数据,所有 follower 都开始同步数据, 但有一个 follower,因为某种故障,迟迟不能与 leader 进行同步,那 leader 就要一直等下去, 直到它完成同步,才能发送 ack。
Leader 维护了一个动态的 in-sync replica set (ISR),意为和 leader 保持同步的 follower 集 合。当 ISR 中的 follower 完成数据的同步之后,leader 就会给 follower 发送 ack。如果 follower 长时间未向 leader 同步数据,则该 follower 将被踢出 ISR,该时间阈值由 replica.lag.time.max.ms 参数设定。Leader 发生故障之后,就会从 ISR 中选举新的 leader。
当acks的值为0或1的时候可能会在成丢失数据,为-1的时候可能是重复数据
数据的一致性
当leader挂掉时,在剩下的follower选取leader的同时,leader又复活了,此时会造成消费者数据不一致的情况
leader 发生故障之后,会从 ISR 中选出一个新的 leader,之后,为保证多个副本之间的 数据一致性,其余的 follower 会先将各自的 log 文件高于 HW 的部分截掉,然后从新的 leader 同步数据。
4.kafka使用 抛出异常
原因如下
Newer versions(2.2 and above) of Kafka no longer require ZooKeeper connection string ie --zookeeper localhost:2181 and throw Exception in thread "main" joptsimple.UnrecognizedOptionException: zookeeper is not a recognized option while creating Kafka topic. Instead, add Kafka Broker --bootstrap-server localhost:9092 connection string.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)