Live2D

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集群架构图

image

创建主题

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.工作流程

image

kafka的消息是以Topic(主题)进行分类的,但是Topic只是逻辑概念,partitions是物理概念 ,是真实存放的

image

打开分区,每个partitions都会对应一个log文件,这个文件就是存放producer生产的数据。

image

存储结构如下

image

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又复活了,此时会造成消费者数据不一致的情况

image

leader 发生故障之后,会从 ISR 中选出一个新的 leader,之后,为保证多个副本之间的 数据一致性,其余的 follower 会先将各自的 log 文件高于 HW 的部分截掉,然后从新的 leader 同步数据。

4.kafka使用 抛出异常

image

原因如下

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.
posted @ 2022-03-04 10:30  没有梦想的java菜鸟  阅读(113)  评论(0编辑  收藏  举报