kafka 基础架构
-
kafka 体系结构
-
kafka 多个副本
名词 介绍 producer 生产者、发送数据的一方,负责创建消息,投递到kafka consumer 消费者、接受数据的一方,负责接受数据,执行业务的逻辑处理 Consumer Group 消费者组、组内可以包含多个消费者,一个消息可以被多个消费者组消费,但是只能被一个消费者组中的消费者消费 Zookeeper 维护和协调 broker,负责 Broker Controller 的选举 broker 服务代理节点 topic 主题、kafka消息以主题为单位进行归类 partition 分区、主题在不同节点的存储,同一主题在不同分区下的消息是不同的 leader 每个分区的leader 负责写入数据 follower 同步leader的数据,备份数据 ISR ISR(In-Sync Replicas) 同步副本列表、OSR(Outof-Sync Replicas)滞后副本、AR(Assigned Replicas)所有副本; AR = ISR + ORS HW High Watermark 高水位线,特定消息的偏移量,只能拉取这个偏移量之前的消息 LEO Log End Offset 当前日志文件下一条写入消息的offset,也就是当前日志分区中最后一条消息的offset + 1 offset commit 消费者消费消息之后,提交这个偏移量,每次从这个偏移量开始消费消息,存储在__consumer_offsets中。重复消费/丢失消息 rebalance 再均衡,分区的所属权从一个消费者转移到另外一个消费者的行为。消费者组中消费者添加和删除的时候。为消费组保障高可用和伸缩性 Broker Controller 管理整个集群中 partition和副本 replicas 的状态。leader 宕机后,从 ISR 中选举出(ISR中第一个)一个 Follower 做为新的leader。
搭建kafka集群
-
安装jdk
解压完成之后 编辑etc/profile
# jdk export JAVA_HOME=/usr/jdk/jdk1.8.0_144 export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin
source etc/profile 让环境变量生效 java-version 查看是否配置成功
-
安装zookeeper
复制zoo_sample.cfg zoo.cfg
dataDir=/usr/local/zookeeper/data
可以修改到自己设定目录
./zkServer.sh start
-
安装kafka
修改config/server.properties
broker.id=1 listeners=PLAINTEXT://localhost:9092 zookeeper.connect=115.xxx.xxx.xxx:2181 log.dirs=/tmp/kafka0/logs
bin/kafka-server-start.sh --daemon config/server.properties 后台线程启动kafka
基础操作
-
kafka 创建topic
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topic-three --replication-factor 3 --partitions 3
创建topic:topic-three 3个分区 3副本(包含leader)
-
kafka 删除topic
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic tpoic-second
-
kafka 显示所有的topic信息
bin/kafka-topics.sh --zookeeper localhost:2181 --describe
-
kakfa 生产者发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-three
这里是指定kafka集群的list,指定其中一个就可以,zookeeper可以找打剩下的节点
-
kafka 消费者接受消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-three --from-beginning
查看信息
-
查看日志信息 切换到对应的logs目录下
文件夹 = topic + 分区的id
包含三个文件:.index、.log、.timeindex、leader-epoch-checkpoint
可以发现我们的数据就存放在.log中
-
在zookeeper中查看kafka的信息
在zookeeper 的bin目录下 执行./zkCli.sh, 可以查看kafka的一些基本信息