Kafka总结

kafka学习记录


前言

一、基本概念

1、Broker:

相当于一个kafka节点(服务),多个broker组成一个kafka集群。

2、Topic:主题

kafka的消息存储在一个主题中,一个主题相当于数据库的一个表,相当于某一实体类对于的存储表。

3、Produce:生产者,向broker发消息的客户端

4、Consumer:消费者,从broker取消息

在这里插入图片描述

5、Partition:分区,一个topic会分为多个分区。

分区的好处:①一个主题的数据量过大时,分区能避免存储文件过大。②提高读写的吞吐量,读写可以在多个分区进行了。
在这里插入图片描述

6、Offset:偏移量,消费者消费消息时,根据当前主题分区的偏移量来消费

消费过程:①此时偏移量为0,生产者还没发消息,偏移量为0位置上无数据,消费者不消费
在这里插入图片描述
②生产者发送数据A,消费者读取到数据后,将偏移量+1,然后监听偏移量为1的位置。
③生产者继续发送数据B,此时数据落在偏移量为1的位置上,消费者监听到1号位有数据后,消费并继续将偏移量+1,循环往复。
在这里插入图片描述

7、Replication:副本

每个分区会存在多个副本,副本只负责备份,不负责任读写。
以下:分区partition0存在两个副本,两个副本分别存在id为102和103的broker中,其中ISR数组的意思是当前三个分区的数据都一致,当其中一个副本的数据与主分区差距较大,ISR会移除该分区
在这里插入图片描述

8、消费组

多个消费者组成一个消费组,为什么要有消费组的概念?首先要引入两个概念
①单播消息:在一个topic中,生产者生产一条消息后,如果有多个消费者同时监听,只有一个消费者能收到该消息。
②多播消息:多个消费者组成为多个消费组,以消费组的去监听消息,那么每个消费组都能收到消息。但只有消费组里的其中一个消费者能收到消息。
如图所示:消费组group1和group2均能收到消息,但也只有组内的消费者1和消费者3收到了消息
在这里插入图片描述

9、整体架构

①以下是一个包含八个broker的kafka集群A,一个broker代表一个可用的kafka实例
②一个broker内的一个主题包含了三个分区,分别为p0,p1,p2分区。
③每个分区又有两份follower副本,每个副本又分别存储在不同的broker下,这就保证了单个broker挂了也不会影响整体的可用性。
在这里插入图片描述

二、安装使用及相关文件说明

1.Linux本地伪分布式安装及相关配置

①下载压缩包https://kafka.apache.org/downloads
在这里插入图片描述
②输入tart -zxvf 文件名解压
在这里插入图片描述
③复制三个/kafka_2.12-3.0.0/config/server.properties的文件分别为如下server0.properties、server1.properties、server2.properties在新创建的etc目录下,同时把config下的也zookeeper.properties复制过来。
在这里插入图片描述
④修改server0.properties、server1.properties、server2.properties的内容分别如下,其中log.dirs里存储的就是kafka里的具体数据
sever0:在这里插入图片描述

server1:在这里插入图片描述

server2:在这里插入图片描述
⑤、进入bin目录,启动zookeeper后,启动kafka0、1、2。(分别开四个窗口启动每条命令)
启动zookeeper:

[root@localhost bin]# ./zookeeper-server-start.sh ../etc/zookeeper.properties 

启动Kafka0、1、2

[root@localhost bin]# ./kafka-server-start.sh ../etc/server0.properties 
[root@localhost bin]# ./kafka-server-start.sh ../etc/server1.properties 
[root@localhost bin]# ./kafka-server-start.sh ../etc/server2.properties 

⑥本文仅展示在同一台服务器上伪分布式的部署,正式的部署需要在多台服务器启动多个kafka实例,同时要提前启动zookeeper,然后在个Kafka实例的server.properites上修改如下修改信息即可,其中第一个ip地址代表当前实例的ip及端口号,第二个代表zookeeper的ip端口号。
在这里插入图片描述

2、/tmp/kafka-logs文件说明

进入/tmp/kafka0-logs/目录,可以看到
在这里插入图片描述
1)test-0:topic为test的文件目录,其他test-1和test-2分别为之前创建另外两个副本
进入test-0,可以看到在这里插入图片描述
①0000000.index:消息实体内容的索引文件
②0000000.log:消息的实体内容存储文件
③0000000.timeindex:根据时间来映射的索引文件。
2)_consumer_offsets系列文件:
①该系列文件是kafka官方的消费者偏移的主题文件,用于保存 consumer 消费消息后的当前偏移量。
②由于消费者也有集群的概念,当同一事务中的某个消费者消费的过程中挂了,集群里的其他消费者就需要继续之前的消费任务,此时,就能通过该偏移量继续之前的消费。
③由于消费者可能会有很多,所以官方默认为该topic创建50个分区,并根据消费组id哈希路由到每个分区上,可以看到,消息的key为消费组id+topic+分区的组合。
在这里插入图片描述

三、相关命令操作

1、创建主题

进入bin目录:输入

[root@localhost bin]# ./kafka-topics.sh --create --topic test --bootstrap-server localhost:9092  --partitions 3 --replication-factor 3

①- -topic test:创建名为test的主题
②- -bootstrap-server localhost:9092:任意一个活跃的Kafka服务的ip端口
③- -partitions 3:主题分区设置为3个
④- -replication-factor 3:副本因子设置为3,即总共三份partition,一份leader,两份follower

2、查看主题详情

1)、查看所有主题

[root@localhost bin]# ./kafka-topics.sh --list  --bootstrap-server  localhost:9093

2)、查看某个主题详情

[root@localhost bin]# ./kafka-topics.sh  --bootstrap-server localhost:9093 --describe --topic test

结果:可以看到创建了0、1、2个分区,每个分区分别有三个副本0、1、2
在这里插入图片描述

3、发送和消费消息

1)生产者发消息
输入如下命令后,出现>号,表示已经打开客户端,输入asd回车后即可发送消息

[root@localhost bin]# ./kafka-console-producer.sh --broker-list localhost:9092 --topic test
>asd

2)消费者消费消息
方式一:从最后一条消息的偏移量+1开始消费,也就意味着,如果还没进入消费者客户端,生产者就已经发了消息,再使用如下命令是收不到之前发的消息。

[root@localhost bin]# ./kafka-console-consumer.sh  --bootstrap-server localhost:9094 --topic test

方式二:从头开始消费,可以收到生产者之前发的信息

[root@localhost bin]# ./kafka-console-consumer.sh  --bootstrap-server localhost:9094 --from-beginning  --topic test

3)以消费组的形式消费消息,可实现多播消息
①创建消费组testGroup1

[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9094 --consumer-property group.id=testGroup1 --topic test

②开启另一个终端创建消费组testGroup2

[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9094 --consumer-property group.id=testGroup2 --topic test

③生产者发送消息,结果最终两个消费组均收到消息
在这里插入图片描述在这里插入图片描述在这里插入图片描述
4)查看消费组及信息
①查看所有消费组

[root@localhost bin]# ./kafka-consumer-groups.sh --bootstrap-server localhost:9094 --list

②查看消费组的具体信息:当前偏移量,最后一条消息的偏移量、堆积的消息量

[root@localhost bin]# ./kafka-consumer-groups.sh --bootstrap-server localhost:9094 --describe --group testGroup1

结果:
在这里插入图片描述
CURRENT-OFFSET:当前被消费的消息偏移量
LOG-END-OFFSET:当前队列上最后一条消息的偏移量(消息总量)
LAG:当前积压的消息量

4、集群消费

1)向集群中发送消息

[root@localhost bin]# ./kafka-console-producer.sh --broker-list localhost:9094 localhost:9092 localhost:9093 --topic test

2)指定消费组从集群中消费消息

[root@localhost bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9094 localhost:9093 localhost:9092 --from-beginning --consumer-property group.id=testGroup1 --topic test

3)消费组中的消费者对各个分区的消费细节
在这里插入图片描述
①一个partition只能被消费组中的一个消费者消费,目的为了保证消费的顺序性,但多个消费者消费多个partition的顺序性是不能保证的
②一个消费组中的消费者数量最好不要超过partition的数量,否则多的消费者可能收不到消息。
③如果某个消费者挂了,会触发rebalance机制,会让其他消费者来消费原分区

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值