1. AKF
x轴:解决高可用单点问题
y轴:解决业务划分问题
z轴:解决分片分治问题
2. kafka集群搭建
2.1 下载安装包
官网地址:kafka
2.2 上传到自己的安装目录
#解压
tar -xzf kafka_2.13-3.2.1.tgz
#改下名字,我嫌名字太长
mv kafka_2.13-3.2.1 /usr/local/kafka
#新建/var/kafka_data 用于存放kafka数据
mkdir -p /var/kafka_data
2.3修改server.properties配置文件
必要的四个配置,根据实际环境操作
#保持唯一
broker.id=0
listeners=PLAINTEXT://node01:9092
log.dirs=/var/kafka-data
zookeeper.connect=node02:2181,node03:2181,node04:2181/kafka
2.4 配置环境变量
vim /etc/profile
#配置
export KAFKA=/usr/local/kafka
export PATH=$PATH:$KAFKA/bin
#刷新环境变量
source /etc/profile
2.5 scp 将kafka 分发到其他节点
#当前所在目录 /usr/local/kafka
scp -r /usr/local/kakfa node02:`pwd`
2.6修改server.properties
broker.id=1
listeners=PLAINTEXT://node02:9092
log.dirs=/var/kafka-data
zookeeper.connect=node02:2181,node03:2181,node04:2181/kafka
2.7 启动kafka
###当前所在目录 /usr/local/kafka/config
kafka-server-start.sh server.properties
3.kafka 的基本使用
3.1 查看相关命令的参数
#敲相关命令 然后回车
3.2创建topic
bootstrap-server 表示的是连接到哪个地址,partitions 表示的是创建几个分区,replication-factor表示的是创建几个副本
kafka-topics.sh --create --topic test --bootstrap-server 192.168.37.129:9092,192.168.37.130:9092,192.168.37.131:9092 --partitions 2 --replication-factor 2
3.3 查看topic相关信息
kafka-topics.sh --describe --topic test --bootstrap-server 192.168.37.129:9092,192.168.37.130:9092,192.168.37.131:9092
3.4简单的生产者消费者
consumer
kafka-console-consumer.sh --bootstrap-server 192.168.37.129:9092,192.168.37.130:9092 --topic test --group msb
producter
kafka-console-producer.sh --bootstrap-server 192.168.37.131:9092 --topic test
生产者生产消息,消费者这边接收
3.5 删除topic
kafka-topic.sh --bootstrap-server 192.168.37.131:9092 --delete --topic test
3.6 修改分区数
kafka-topics.sh --bootstrap-server 192.168.37.131:9092--alter --topic test --partitions 3
4. 文件储存
Kafka文件存储也是通过本地落盘的方式存储的,主要是通过相应的log与index等文件保存具体的消息文件。
生产者不断的向log文件追加消息文件,为了防止log文件过大导致定位效率低下,Kafka的log文件以1G为一个分界点,当.log文件大小超过1G的时候,此时会创建一个新的.log文件,同时为了快速定位大文件中消息位置,Kafka采取了分片和索引的机制来加速定位。
在kafka的存储log的地方,即文件的地方,会存在消费的偏移量以及具体的分区信息,分区信息的话主要包括.index和.log文件组成,
5. 相关名词解释
5.1 Kafka 中的 ISR(InSyncRepli)、 OSR(OutSyncRepli)、 AR(AllRepli)代表什么?
ISR:速率和leader相差低于10s的follower的集合
OSR:速率和leader相差大于10s的follwer
AR:所有分区的follower\
5.2 Kafka 中的 HW、 LEO 等分别代表什么?
HW:High Water高水位,根据同一分区中最低的LEO决定(Log End Offset)
LEO:每个分区最大的Offset
6. ack机制
Kafka为用户提供了三种可靠性级别,用户根据可靠性和延迟的要求进行权衡选择不同的配置。
ack参数配置
0: producer不等待broker的ack,这一操作提供了最低的延迟,broker接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据
1: producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将丢失数据。(只是leader落盘)
-1(all): producer等待broker的ack,partition的leader和ISR的follower全部落盘成功才返回ack,但是如果在follower同步完成后,broker发送ack之前,如果leader发生故障,会造成数据重复。(这里的数据重复是因为没有收到,所以继续重发导致的数据重复)
当ack=-1的时候,就会存在一致性问题,
一致性分为:
强一致性:所有节点必须全部存活,一致性破坏可用性
最终一致性,过半通过,最常用的一致性解决方案