消息中间件kafka基础篇

kafka安装

kafka依赖于zookeeper,安装分为zookeeper安装和kafka安装,本文都针对单机版本的安装。

zookeeper的安装

zookeeper官方下载链接: https://zookeeper.apache.org/releases.html#download.
本文以 zookeeper-3.4.6 版本为例,上传到/opt目录下面,
解压

tar -zxvf zookeeper-3.4.6.tar.gz

启动

cd /opt/zookeeper-3.4.6/bin
./zkServer.sh start

查看是否启动

netstat -anp | grep 2181

在这里插入图片描述
端口被占用说明启动成功。

kakfa的安装

kafka官方下载链接:
http://kafka.apache.org/downloads.
本文以kafka_2.12-2.5.0 版本为例,上传到/opt目录下面,
解压

tar -zxvf kafka_2.12-2.5.0.tgz

启动

cd /opt/kafka_2.12-2.5.0/
 nohup sh bin/kafka-server-start.sh config/server.properties &

查看是否启动

netstat -anp | grep 9092

在这里插入图片描述
端口被占用说明启动成功。
如果是集群安装请参考网上其他文章。

kakfa命令行使用

创建topic

./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 6 --topic test

–replication-factor 副本数
–partitions 分区数
–topic test topic名称

生产者

./kafka-console-producer.sh --broker-list localhost:9092 --topic test

发送消息
在这里插入图片描述

消费者

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic  test  --from-beginning

–from-beginning 从offset为0处开始消费
接收消息
在这里插入图片描述

查看topic详情

./kafka-topics.sh --zookeeper localhost:2181 --topic test --describe

在这里插入图片描述
可以查看topic的分区和副本情况。

查看topic的消费组列表

./kafka-consumer-groups.sh -bootstrap-server localhost:9092 --list

在这里插入图片描述

查看具体消费组的情况

./kafka-consumer-groups.sh  --bootstrap-server localhost:9092 --group console-consumer-87937 --describe

在这里插入图片描述
可以查询某个topic具体消费组消费的情况。

查看当前topic的每个分区的最大offset

kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list node169:9092 -topic profile_test_basic_local_performance --time -1

在这里插入图片描述

删除topic

使用命令行删除topic只是删除的zookeeper上面的数据信息

./kafka-topics.sh --delete --zookeeper localhost:2181 --topic test

在这里插入图片描述
看数据文件发现kafka的数据文件还在

cd /tmp/kafka-logs

在这里插入图片描述
再创建topic test发现已经存在了
在这里插入图片描述
如果要完全删除topic需要把zookeeper上面的topic信息也删除掉

zkCli.sh -server localhost:2181
rmr /brokers/topics/test

再把kafka日志目录下面的文件删除掉
这时再创建test topic已经可以创建了
在这里插入图片描述

kafka相关的数据目录结构

/zookeeper目录结构

ls /

在这里插入图片描述
以上与kafka有关的节点为
1.controller_epoch
2.controller
3.brokers
4.admin
5.isr_change_notification
6.consumers
7.log_dir_event_notification
8.latest_producer_id_block
9.config

/controller_epoch

controller_epoch
记录kafka的控制器情况,
初始为0,每次重新选举后+1,用于防止broker脑裂,无视epoch更低的请求,确保事务的一致性。

controller

集群中第一个启动的broker通过在zk创建一个临时节点/controller成为控制器。如果控制器被关闭或者与zk断开连接,这个节点会消失

/brokers
ls /brokers

在这里插入图片描述
kafka节点的注册信息

ls /brokers/ids

在这里插入图片描述
记录了broker注册的一些配置信息。

ls /brokers/topics

在这里插入图片描述
{“controller_epoch”: 表示kafka集群中的中央控制器选举次数,“leader”: 表示该partition选举leader的brokerId,“version”: 版本编号默认为1,
“leader_epoch”: 该partition leader选举次数,“isr”: [同步副本组brokerId列表]}

/clusters
ls /cluster

在这里插入图片描述
kakfa集群的唯一标识。

/consumers

新版本的消费者的offset等信息已经迁移到kafka自己的log目录里面去了。
在这里插入图片描述

/admin

可以查看kafka删除的topic信息
在这里插入图片描述
如果设置了delete.topic.enable=true,那么执行删除命令
./kafka-topics.sh --delete --zookeeper localhost:2181 --topic test之后,会在/admin/delete_topics节点下面建立要删除的topic,controller在/admin/delete_topics节点下面注册了监听器,监听到要删除的topic的时候执行具体的删除逻辑。

/config

topic的配置信息
在这里插入图片描述

/isr_change_notification

ISR为所有leader与副本保持一致的副本集合,当ISR 集合发生变更时还会将变更后的记录缓存到isrChangeSet 中,isr-change-propagation任务会周期性(固定值为2500ms)地检查isrChangeSet,如果发现isrChangeSet中有ISR集合的变更记录,那么它会在ZooKeeper的/isr_change_notification路径下创建一个以isr_change_开头的持久顺序节点(比如/isr_change_notification/isr_change_0000000000),并将isrChangeSet中的信息保存到这个节点中。Kafka控制器controller为/isr_change_notification添加了一个Watcher,当这个节点中有子节点发生变化时会触发Watcher的动作,以此通知控制器更新相关元数据信息并向它管理的broker节点发送更新元数据的请求,最后删除/isr_change_notification路径下已经处理过

/latest_producer_id_block

kafka为了保证生产者producer的幂等性,不重复发送,以几个维度作为唯一性的判断依据:
1.PID:每个Producer在初始化时都会被分配一个唯一的PID。
2.sequence numbers:发送者发送每条消息都会生成一个递增的数字,区分发送数据的事务。
3.topic
4.partition
PID + sequence numbers + topic + partition作为u唯一性依据,如果发现重复,则说明消息已经发送过了。
PID生成规则为从zookeeper的 /latest_producer_id_block节点下面PID段(block_start-block_end)获取取值范围。
在这里插入图片描述
PID段默认长度为1000,当第一次申请的时候,为0-999,第二次获取的时候拿到block_end(999),在999后获取1000-1999这个段,生成自己的PID,再将1000-1999这个段写入/latest_producer_id_block节点,依次类推,由此保证PID的唯一性,保证kafka生产者生产数据的幂等性。

kafka数据的目录结构

cd /tmp/kafka-logs

在这里插入图片描述其中以__consumer_offset开头的记录的是消费者的offset的topic,test-0代表test这个topic分区为0的数据分区。

cd test-0

在这里插入图片描述
.index(物理索引),
.timeindex(时间索引)记录topic分区的索引信息
.log存储的是kafka的具体消息
leader-epoch-checkpoint,保存了每一任leader开始写入消息时的offset 会定时更新
follower被选为leader时会根据这个确定哪些消息可用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值