概述:
- Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
- Kafka架构图:
- 详解:
1)Producer :消息生产者,就是向kafka broker发消息的客户端
2)Consumer :消息消费者,向kafka broker取消息的客户端
3)Topic :可以理解为一个队列
4) Consumer Group (CG):这是kafka用来实现一个topic消息的广播(发给所有的 consumer)和单播(发给任意一个consumer)的手段
5)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic
6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序
7)Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka
Kafka集群部署
- 解压安装包:
tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
- 解压后修改文件名称:
mv kafka_2.11-0.11.0.0/ kafka
- 在/opt/module/kafka目录下创建logs文件夹:
mkdir logs
- 修改配置文件 :
vi config/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=hd101:2181,hd102:2181,hd103:2181
- 配置环境变量:
sudo vi /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
- 分发安装包和profile文件:
xsync kafka /etc/profile
- 分别在hd102和hd103上修改配置文件/opt/module/kafka/config/server.properties中的broker.id= 1、broker.id = 2;
- 启动集群:
[zy@hd101 kafka]$ bin/kafka-server-start.sh config/server.properties &
[zy@hd102 kafka]$ bin/kafka-server-start.sh config/server.properties &
[zy@hd103 kafka]$ bin/kafka-server-start.sh config/server.properties &
- 关闭集群:
[zy@hd101 kafka]$ bin/kafka-server-stop.sh stop
[zy@hd102 kafka]$ bin/kafka-server-stop.sh stop
[zy@hd103 kafka]$ bin/kafka-server-stop.sh stop
命令行操作
- 查看当前服务器中的所有topic
[zy@hd101 kafka]$ bin/kafka-topics.sh --zookeeper hd101:2181 --list
- 创建topic
[zy@hd101 kafka]$ bin/kafka-topics.sh --zookeeper hd101:2181 --create --replication-factor 3 --partitions 1 --topic first
- 删除topic
[zy@hd101 kafka]$ bin/kafka-topics.sh --zookeeper hd101:2181 --delete --topic first
//需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启
- 发送消息
[zy@hd101 kafka]$ bin/kafka-console-producer.sh --broker-list hd101:9092 --topic first
- 消费消息
[zy@hd101 kafka]$ bin/kafka-console-consumer.sh --zookeeper hd101:2181 --from-beginning --topic first
//--from-beginning:会把first主题中以往所有的数据都读取出来。根据业务场景选择是否增加该配置
- 查看某个Topic的详情
[zy@hd101 kafka]$ bin/kafka-console-consumer.sh --zookeeper hd101:2181 --describe --topic first