【kafka-01】kafka安装和基本核心概念

Kafka系列整体栏目


内容 链接地址
【一】afka安装和基本核心概念 https://zhenghuisheng.blog.csdn.net/article/details/142213307
【二】kafka集群搭建 https://zhenghuisheng.blog.csdn.net/article/details/142253288

kafka安装和基本核心概念

一,kafka安装和基本核心概念

1,kafka的安装和运行

1.1 kafka下载和安装

下载地址,目前下载的版本是 Scala 2.12 - kafka_2.12-3.6.2.tgz (asc, sha512),一定要下载二进制文件,不要下载源码

java 复制代码
https://kafka.apache.org/downloads

随后将压缩包解压,这里把压缩包上传到 /usr/local/software/kafka 下面

java 复制代码
tar -zxvf kafka_2.12-3.6.2.tgz

1.2,修改kafka配置文件

成功解压之后,首先切换到安装目录下面的config目录,然后编辑 server.properties 配置文件

java 复制代码
vim config/server.properties  //编辑服务端的配置

首先在server.properties 文件中,需要先设置broker.id,单机情况下设置0即可

java 复制代码
broker.id=0 	//	机器内部的唯一标识

随后设置一个监听的端口,这样客户端可以通过这个ip + 端口访问kafka broker

java 复制代码
listeners=PLAINTEXT://0.0.0.0:9092
//ip用localhost或者服务器ip
advertised.listeners=PLAINTEXT://192.168.1.100:9092

随后设置kakfa日志目录,在kafka安装目录下面创建 /temp/logs 目录

java 复制代码
log.dirs=/usr/local/software/kafka/temp/logs	//设置kafka的日志目录

最后设置这个zookeeper的链安装 录,在kafka的高版本中,内部均自带了zookeeper,如果是服务器 localhost 需要换成服务器对应的ip地址。如果zk搭建的是一个集群,那么将全部的ip地址+端口填上,中间通过逗号分开

java 复制代码
zookeeper.connect=localhost:2181 	//连接zookeeper,默认端口是2181

1.3,启动kafka和zk

在经过上面的几个步骤之后,随后先启动zookeeper,切换到安装目录的下一个目录

java 复制代码
bin/zookeeper-server-start.sh config/zookeeper.properties

随后再启动kafka,不出意外的话两个都能启动成功,只不过在启动这两个命令时,需要开启两个客户端

java 复制代码
bin/kafka-server-start.sh config/server.properties

1.4,消息生产和消费

随后创建一个主题测试一下,和上面一样,如果是服务器可以将 localhost 替换成服务器ip,设置一个 partitions 分区和一个副本

java 复制代码
bin/kafka-topics.sh --create --topic zhstest11 --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

Created topic zhstest11.

随后发送一条消息给这个主题,执行完下面这条命令之后,随后在控制台继续输入几个字符串,如test111

java 复制代码
bin/kafka-console-producer.sh --topic zhstest11 --bootstrap-server localhost:9092
> test111

测试是否能接受到消息,在输入下面这条接受命令之后,发现是可以接收到往主题发送的消息的,通过加入 --from-beginning 参数,可以将以往的全部参数消费,否则只能被消费一次

java 复制代码
//消费者只能消费该服务启动后所发送的消息
bin/kafka-console-consumer.sh --topic zhstest11 --bootstrap-server localhost:9092
bin/kafka-console-consumer.sh --topic zhstest11 --from-beginning --bootstrap-server localhost:9092

2,kafka的基本原理

2.1,消费者组实现单播多播

开启两个客户端,然后同时执行一条一模一样的命令,并且设置一个参数 --consumer-property group.id=group1 ,既设置一个消费者组group1,这两个服务端属于同一个消费者组下面的消费者。在结果可以看出一条消息只会被消费者组中的其中一个消费者消费。而消费者组属于是一种逻辑上的概念,通过这种原理就实现了单播消费

java 复制代码
bin/kafka-console-consumer.sh --consumer-property group.id=group1 --topic zhstest11 --bootstrap-server localhost:9092


既然上面一个组下面只能被一个消费者消费,那么想要实现多播消费,只需要设置不同的组即可,就是说如果有两个不同的组,那么两个不同组的消费者都是可以将这些消息消费到的,如一下将客户端6的组改成group2,那么客户端5和客户端6都能消费到消息

2.2,kafka消费机制

如果是以某个消费者为主体,那么当这个消费者将原来的数据消费完之后,正常就不会在消费,即使如重启之前消费了10个消息,那么启动之后就会从第11个消息继续往下消费。消费者组的概念也一样,但是消费者组是以组为一个主题,只要组内有一个消费者将消息给消费了,那么就会默认这个组将消息消费。这里涉及到一个分区的概念,假设有10个分区,假设某个组内的某一个消费者将消息消费到第2个分区,那么底层就会默认整组将消息消费到第二个分区,当有下一个消费者也想消费第二个分区的数据的时候,会判断整组是否消费过这个分区或者某一条数据,如果消费过了就不会重复消费,这就解释了为什么在同一个组中,消息只能被一个消费者消费。

如执行以下这条命令,就可以看到上面group1组的详细信息,根据下图可知,group1中的消费者已经将TOPIC中zhstest11的主体消费到了26个偏移量,那么组内的其他成员就不可能会消费前26个偏移量的消息。

java 复制代码
./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group group1

如果此时将全部的group1组中的端口全部关闭,随后再在生产者中给这个主题发送3个消息

出现的情况如下,此时当前的偏移量还是26,但是日志偏移量为29,内部还有一个LAG为3,表示还有3条消息未消费,如果下次有对应的消费者启动,那么就会把这3条消息给消费

2.3,topic主题

在kafka中,主体是一种逻辑概念,broker中的数据是存储在partition中。查看全部主题的命令如下

java 复制代码
bin/kafka-topics.sh --list --bootstrap-server localhost:9092

详细的查看某一个主题的命令如下,如查看上面的 zhstest11 主题

java 复制代码
bin/kafka-topics.sh --describe --topic zhstest11 --bootstrap-server localhost:9092

在实际开发中,可以建立多个topic来对应不同的业务。

2.4,Partition分区

上面说了主题不是用于存具体数据的,存具体数据的而是分区。接下开打开上面kafka配置log文件的目录,可以发现配置的日志文件里面多了很多东西,就是一个个对应Partition分区,也有刚刚上面创建的一些主题所对应的分区

java 复制代码
/usr/local/software/kafka/temp/logs

随意的切换到一个 zhstest11-0 的文件下面,其对应的文件如下,里面存了具体数据,索引等。

.log文件代表的是存储分区中实际的消息,是核心的数据

.index和普通的索引一样,记录文件物理位置的索引

.timeindex也是和上面的索引一样,但是这个索引是专门根据时间来进行查询的索引

.snapshot是快照文件,系统崩溃时用来会的的文件

.metadata是元数据信息文件,比如说一些基础的配置信息都在这个文件中

上面在创建这个主题时只设置了一个分区,如果想设置扩容设置多个分区的话,可以直接使用扩容命令,如下面将原来的1个分区扩容到3个分区,扩容前的消息还存在原来的分区中,扩容后的消息会根据负载均衡机制,生产者通过该机制存到对应的分区中

java 复制代码
bin/kafka-topics.sh --alter --topic zhstest11 --partitions 3 --bootstrap-server localhost:9092

扩容完分区之后,再来查看这个主题的详细信息,可以发现内部已经有了3个分区,分别对应这partition0,partition1,partition2

在kafka中,虽然支持扩容操作,但是不支持缩容操作,因为里面会涉及到很多的消息,索引等的变化或者丢失。并且在server.properties配置文件可以得知,kafka数据一般会被保留7天,当然这个参数可以调整,默认是7天。

2.6,broker

broker就有点类似于一个进程,也被称为一个kafka结点。在一台机器上,可以有一个broker,也可以有多个broker,但是为了系统的高性能,一般会选择一台机器上只有一个broker,让他独享所有的内存和cpu等资源。在一个broker中,可以有多个主题,一个主题中会有多个分区,一个主题可以分布在多个broker上,从而实现分布式存储,再来提升整个系统的吞吐量。

相关推荐
天冬忘忧41 分钟前
Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
大数据·分布式·kafka
sevevty-seven1 小时前
幻读是什么?用什么隔离级别可以防止幻读
大数据·sql
Yz98763 小时前
hive复杂数据类型Array & Map & Struct & 炸裂函数explode
大数据·数据库·数据仓库·hive·hadoop·数据库开发·big data
工业甲酰苯胺3 小时前
Python脚本消费多个Kafka topic
开发语言·python·kafka
那一抹阳光多灿烂4 小时前
Spark中的Stage概念
大数据·spark
北京鹏生科技有限公司4 小时前
EcoVadis审核是什么?EcoVadis审核流程包括什么?
大数据·百度
B站计算机毕业设计超人4 小时前
计算机毕业设计SparkStreaming+Kafka新能源汽车推荐系统 汽车数据分析可视化大屏 新能源汽车推荐系统 汽车爬虫 汽车大数据 机器学习
数据仓库·爬虫·python·数据分析·kafka·数据可视化·推荐算法
Moshow郑锴5 小时前
数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别
大数据·数据库·数据仓库·数据湖·湖仓一体
IT枫斗者5 小时前
如何解决Java EasyExcel 导出报内存溢出
java·服务器·开发语言·网络·分布式·物联网
谷大羽5 小时前
Kafka Stream实战教程
spring boot·后端·中间件·kafka·stream