当前位置: 首页 > article >正文

【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下载和安装
      • 1.2,修改kafka配置文件
      • 1.3,启动kafka和zk
      • 1.4,消息生产和消费
    • 2,kafka的基本原理
      • 2.1,消费者组实现单播多播
      • 2.2,kafka消费机制
      • 2.3,topic主题
      • 2.4,Partition分区
      • 2.6,broker

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

1,kafka的安装和运行

1.1 kafka下载和安装

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

https://kafka.apache.org/downloads

在这里插入图片描述

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

tar -zxvf kafka_2.12-3.6.2.tgz

1.2,修改kafka配置文件

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

vim config/server.properties  //编辑服务端的配置

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

broker.id=0 	//	机器内部的唯一标识

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

listeners=PLAINTEXT://0.0.0.0:9092
//ip用localhost或者服务器ip
advertised.listeners=PLAINTEXT://192.168.1.100:9092

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

log.dirs=/usr/local/software/kafka/temp/logs	//设置kafka的日志目录

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

zookeeper.connect=localhost:2181 	//连接zookeeper,默认端口是2181

1.3,启动kafka和zk

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

bin/zookeeper-server-start.sh config/zookeeper.properties

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

bin/kafka-server-start.sh config/server.properties

1.4,消息生产和消费

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

bin/kafka-topics.sh --create --topic zhstest11 --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

Created topic zhstest11.

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

bin/kafka-console-producer.sh --topic zhstest11 --bootstrap-server localhost:9092
> test111

在这里插入图片描述

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

//消费者只能消费该服务启动后所发送的消息
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,这两个服务端属于同一个消费者组下面的消费者。在结果可以看出一条消息只会被消费者组中的其中一个消费者消费。而消费者组属于是一种逻辑上的概念,通过这种原理就实现了单播消费

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个偏移量的消息。

./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中。查看全部主题的命令如下

bin/kafka-topics.sh --list --bootstrap-server localhost:9092

在这里插入图片描述

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

bin/kafka-topics.sh --describe --topic zhstest11 --bootstrap-server localhost:9092

在这里插入图片描述

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

2.4,Partition分区

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

/usr/local/software/kafka/temp/logs

在这里插入图片描述

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

在这里插入图片描述

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

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

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

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

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

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

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

在这里插入图片描述


http://www.kler.cn/news/310901.html

相关文章:

  • CSP-J算法基础 树状结构与二叉树
  • C++笔记21•C++11•
  • PyRosetta Task介绍及示例代码
  • nginx基础篇(一)
  • 算法:双指针题目练习
  • MATLAB图像处理
  • CISP备考题库(八)
  • 术语“in law”(在分布上)
  • oracle表的类型
  • 当 PC 端和移动端共用一个域名时,避免 CDN 缓存页面混乱(nginx)
  • 基于MATLAB/Simulink的模型降阶方法介绍
  • Unity射击游戏开发教程:(36)敌人关卡生成器的设计和开发
  • 【STM32系统】基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流)——文末工程资料下载
  • IP协议及相关特性
  • 理解AAC和Opus的编码与解码流程
  • 企业导师面对面,产教融合实训基地搭建人才成长快车道
  • 掌握RESTful API设计:构建高效、可扩展的Web服务
  • Android Studio报错: Could not find pub.devrel:easypermissions:0.3.0, 改用linux编译
  • 在线考试|基于java的模拟考试系统小程序(源码+数据库+文档)
  • Modbus_RTU和Modbus库
  • 1.Seata 1.5.2 seata-server搭建
  • 线程池的类型和状态
  • sqli-labs靶场自动化利用工具——第11关
  • 【深度学习】(2)--PyTorch框架认识
  • 设计模式(Design Patterns)
  • springBoot整合mybatisplus
  • 学习风格的类型
  • 内核是如何接收网络包的
  • FLUX屠榜了小红书,平台这会也真假难辨
  • PMP 报考条件是有哪些?