Kafka笔记
kafka基础架构
1)Producer :消息生产者,就是向 kafka broker 发消息的客户端;
2)Consumer :消息消费者,向 kafka broker 取消息的客户端;
3)Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
4)Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。
5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic;
6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分多个 partition,每个 partition 是一个有序的队列;
7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。
8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
9)follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。leader 发生故障时,某个 follower 会成为新的 follower。
安装部署
集群规划:(kafaka 依赖于zookeeper)
Hadoop102 | Hadoop103 | Hadoop104 |
---|---|---|
zk | zk | zk |
Kafka | Kafka | Kafka |
-
jar包下载
下载地址:https://kafka.apachecn.org/downloads.html
选择版本:0.11.0.0
-
上传文件,解压安装包,修改文件夹名称
[hadoop@hadoop102 software]$ rz [hadoop@hadoop102 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/ [hadoop@hadoop102 module]$ mv kafka_2.11-0.11.0.0/ kafka
-
在/opt/module/kafka 目录下创建 logs 文件夹
[hadoop@hadoop102 module]$ cd kafka/ [hadoop@hadoop102 kafka]$ ls bin config libs LICENSE NOTICE site-docs [hadoop@hadoop102 kafka]$ mkdir logs
-
修改配置文件
[hadoop@hadoop102 kafka]$ cd config/ [hadoop@hadoop102 config]$ vi server.properties #broker 的全局唯一编号,不能重复 broker.id=0 #删除 topic 功能使能 delete.topic.enable=true #处理网络请求的线程数量 num.network.threads=3 #用来处理磁盘 IO 的现成数量 num.io.threads=8 #发送套接字的缓冲区大小 socket.send.buffer.bytes=102400 #接收套接字的缓冲区大小 socket.receive.buffer.bytes=102400 #请求套接字的缓冲区大小 socket.request.max.bytes=104857600 #kafka 运行日志存放的路径 log.dirs=/opt/module/kafka/logs #topic 在当前 broker 上的分区个数 num.partitions=1 #用来恢复和清理 data 下数据的线程数量 num.recovery.threads.per.data.dir=1 #segment 文件保留的最长时间,超时将被删除 log.retention.hours=168 #配置连接 Zookeeper 集群地址 zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181
-
配置环境变量
[hadoop@hadoop102 etc]$ sudo vi /etc/profile.d/my_env.sh
-
分发安装包和环境变量
## 分发安装包 [hadoop@hadoop102 module]$ xsync kafka/ ## 分发环境变量 [hadoop@hadoop102 module]$ sudo /home/hadoop/bin/xsync /etc/profile.d/my_env.sh ## 使配置生效 [hadoop@hadoop102 module]$ source /etc/profile [hadoop@hadoop103 module]$ source /etc/profile [hadoop@hadoop104 module]$ source /etc/profile
-
分别在 hadoop103 和 hadoop104 上修改配置文件/opt/module/kafka/config/server.properties中的 broker.id=1、broker.id=2
注:broker.id 不得重复
[hadoop@hadoop103 clickhouse]$ vi /opt/module/kafka/config/server.properties [hadoop@hadoop104 clickhouse]$ vi /opt/module/kafka/config/server.properties
-
启动集群
## 启动zk [hadoop@hadoop102 module]$ myzk.sh start =================== 启动 Zookeeper 集群 =================== JMX enabled by default Using config: /opt/module/zookeeper-3.4.5-cdh5.12.1/bin/../conf/zoo.cfg Starting zookeeper ... STARTED JMX enabled by default Using config: /opt/module/zookeeper-3.4.5-cdh5.12.1/bin/../conf/zoo.cfg Starting zookeeper ... STARTED JMX enabled by default Using config: /opt/module/zookeeper-3.4.5-cdh5.12.1/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ##依次在 hadoop102、hadoop103、hadoop104 节点上启动 kafka [hadoop@hadoop102 module]$ bin/kafka-server-start.sh -daemon config/server.properties [hadoop@hadoop103 module]$ bin/kafka-server-start.sh -daemon config/server.properties [hadoop@hadoop104 module]$ bin/kafka-server-start.sh -daemon config/server.properties ## 关闭 [hadoop@hadoop102 kafka]$ bin/kafka-server-stop.sh stop [hadoop@hadoop103 kafka]$ bin/kafka-server-stop.sh stop [hadoop@hadoop104 kafka]$ bin/kafka-server-stop.sh stop
-
使用脚本群起
[hadoop@hadoop102 kafka]$ cd /home/hadoop/bin/ [hadoop@hadoop102 bin]$ vi mykafka.sh #!/bin/bash case $1 in "start"){ for i in hadoop102 hadoop103 hadoop104 do echo "*****$i Start*****" ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties" done };; "stop"){ for i in hadoop102 hadoop103 hadoop104 do echo "*****$i Stop*****" ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh" done };; *) echo "Input Args Error..." ;; esac ~ ~ "mykafka.sh" [New] 22L, 440C written [hadoop@hadoop102 bin]$ chmod 777 mykafka.sh
-
使用脚本启动
[hadoop@hadoop102 bin]$ jpsall =============== hadoop102 =============== 2626 QuorumPeerMain 3356 Jps =============== hadoop103 =============== 4263 QuorumPeerMain 4671 Jps =============== hadoop104 =============== 4304 QuorumPeerMain 4710 Jps [hadoop@hadoop102 bin]$ mykafka.sh start *****hadoop102 Start***** *****hadoop103 Start***** *****hadoop104 Start***** [hadoop@hadoop102 bin]$ jpsall =============== hadoop102 =============== 2626 QuorumPeerMain 3682 Jps 3612 Kafka =============== hadoop103 =============== 4263 QuorumPeerMain 4985 Jps 4923 Kafka =============== hadoop104 =============== 4304 QuorumPeerMain 5024 Jps 4962 Kafka [hadoop@hadoop102 bin]$ mykafka.sh stop *****hadoop102 Stop***** *****hadoop103 Stop***** *****hadoop104 Stop***** [hadoop@hadoop102 bin]$ jpsall =============== hadoop102 =============== 2626 QuorumPeerMain 3756 Jps =============== hadoop103 =============== 4263 QuorumPeerMain 5048 Jps =============== hadoop104 =============== 4304 QuorumPeerMain 5088 Jps