下载kafka后,安装,查看kafka目录结构,如下:
1).bin中是 kafka的命令
2).config中是kafka的各种配置文件
二. 搭建kafka集群,只要改变server.properties文件即可
主要修改以下配置:
broker.id = 0 //每个节点设置,不能重复,从0开始的整数
delete.topic.enable = true //topic节点可以删除,默认是false
log.retention.hours=168 //设置存储的时间(这个应该代表消费以后。1个小时前的数据删除)
log.segment.bytes=1073741824 //控制日志segment文件的大小,超出该大小则追加到一个新的日志segment文件中(-1表示没有限制)
log.retention.check.interval.ms=300000 //日志片段文件的检查周期,查看它们是否达到了删除策略的设置
log.dirs=/opt/module/kafka/logs //设置log和数据的目录
zookeeper.connect=hadoop102:2181, hadoop103:2181, hadoop104:2181 //kafka三个节点集群
三. 进入bin 查看几个核心命令 (kafka依赖zookeeper,也是一台一台的启动)
1.kafka-server-start.sh //启动kafka
2.kafka-server-stop.sh //停止kafka
3.kafka-topic.sh //topic操作命令
4.kafka-console-consumer.sh // 消费者命令 测试用
5.kafka-console-producer.sh //生产者命令 测试用
四.命令操作
了解常用命令后,我们启动kafka之前,要先启动zk
1.启动zk /opt/module/zookeeper-3.4.10/bin/zkserver.sh
2.查看zookeeper是否启动 /opt/module/zookeeper-3.4.10/bin/zkserver.sh status //如果看到了leader 或 follower时,就是启动了
3.启动kafka
bin/kafka-server-start.sh config/server.properties
4.查看kafka
1).util.sh //这个可以看到各节点的进程号,和进程名称 (经验者告知:启动后,最好把进程计入文档中,以便后续关闭是参考)
2).jps -l
5.创建topic
bin/kafka-topics.sh --create --zookeeper hadoop102:2181 --partitions 2 --replication-factor 2 --topic first
create:创建
zookeeper :依赖zookeeper
partitions:分区
replication:副本
topic:topic名称
6.查看topic是否创建成功
bin/kafka-topics.sh --list --zookeeper hadoop102:2181
在logs下查看数据文件
7.删除topic
bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic first
8.发送消息 【生产者连的是broker】
bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic first
9.消费消息 【消费者连的是zookeeper】
bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --from-beginning --topic first
10.查看topic详情
bin/kafka-topic.sh --zookeeper hadoop102:2181 --describe --topic first
五. Kafka生产过程分析
5.1写入方式
producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,开辟了磁盘完整的空间,属于顺序写磁盘(顺序写磁盘效率比所及写内存要高,保障kafka吞吐率)。每一个消息都被赋予一个唯一的offset值。
1)分区的原因
(1).方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了。
(2).可以提高并发,因为可以以Partition为单位读写了。
2)分区的原则
(1).指定了partition,则直接使用
(2).未指定partition但指定了key,通过对key的value进行hash出一个partition
(3). partition和key都未指定,使用轮询选出一个partition
3).副本(Replication)
同一个partition可能会有多个replication。
4)生产者写入流程 (这个图ack是ALL) 生产者有一个ack应答机制,机制有0,1,all (图片来自他视屏)