【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上,从而实现分布式存储,再来提升整个系统的吞吐量。

相关推荐
nangonghen10 分钟前
通过logstash同步elasticsearch数据
大数据·elasticsearch
暮-夜染17 分钟前
从数据仓库到数据中台再到数据飞轮:我了解的数据技术进化史
大数据·数据仓库·数据飞轮
檀越剑指大厂20 分钟前
【Elasticsearch系列四】ELK Stack
大数据·elk·elasticsearch
是店小二呀21 分钟前
从数据仓库到数据中台再到数据飞轮:社交媒体的数据技术进化史
大数据·数据仓库·媒体
shuxianshrng1 小时前
鹰眼降尘系统怎么样
大数据·服务器·人工智能·数码相机·物联网
优思学院1 小时前
优思学院|如何从零开始自己学习六西格玛?
大数据·运维·服务器·学习·六西格玛黑带·cssbb
JermeryBesian1 小时前
Flink系列知识之:Checkpoint原理
大数据·flink
lwprain1 小时前
编写第一个hadoop3.3.6的mapreduce程序
大数据·mapreduce
huisheng_qaq2 小时前
【kafka-03】springboot整合kafka以及核心参数详解
spring boot·kafka·消息队列·topic·partition·kafka底层原理
妙龄少女郭德纲2 小时前
基于Spark框架实现XGBoost模型
大数据·分布式·spark