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

news2024/11/14 15:39:34

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.coloradmin.cn/o/2142008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MoneyPrinterTurbo 安装使用流程

项目地址: https://github.com/harry0703/MoneyPrinterTurbo 开发环境:mac 1 git 下载 # 下载代码到本地 git clone https://github.com/harry0703/MoneyPrinterTurbo.git cd MoneyPrinterTurbo2 docker 配源 在 docker 安装目录执行以下命令显示隐藏…

Spring模块详解Ⅳ(Spring ORM和Spring Transaction)

目录 Spring ORM(Object-Relational Mapping)作用核心组件使用步骤事务管理代码演示优点挑战总结 Spring Transaction(Spring事务管理)事务的基本概念Spring事务管理的类型声明式事务管理事务的传播行为(Propagation&a…

【LabVIEW学习篇 - 25】:JKI状态机

文章目录 JKI状态机JKI状态机安装JKI状态机的基本了解状态机的运行原理示例 JKI状态机 JKI状态机的核心就是队列消息状态机用户事件处理器模式,JKI状态机采用指定格式的字符串来描述状态。 JKI状态机并没有采用队列而是采用指定的字符串进行存储,它封装…

【论文阅读】PERCEIVER-ACTOR: A Multi-Task Transformer for Robotic Manipulation

Abstract transformers凭借其对大型数据集的扩展能力,彻底改变了视觉和自然语言处理。但在机器人操作中,数据既有限又昂贵。通过正确的问题表述,操纵仍然可以从变形金刚中受益吗?我们使用peract来研究这个问题,peract…

图解Redis 02 | String数据类型的原理及应用场景

介绍 在 Redis 中,String 是一种重要的数据类型,是最基本的 key-value 结构,在这个结构中, value 是一个字符串。value 所能容纳的数据最大长度为512M。 需要注意的是,这里的字符串不只指文本数据,它还可…

Https AK--(ssl 安全感满满)

免责声明:本文仅做分享! 目录 https探测 openssl Openssl连接服务器获取基本信息 连接命令: 指定算法连接: 测试弱协议连接是否可以连接: 得到的内容包括: sslscan 在线查询证书 https AK type 中间人AK sslsplit 工具…

【C++题解】1997. 孤独的素数

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1997. 孤独的素数 类型:二维数组 题目描述: 在一个 n 行 m 列的矩阵王国中,生活着一些整数,其中一些是素数,一些不是素数…

数据中心一体化智能运维方案

数据中心基础运维概述 在当今这个信息化的时代,数据中心作为支撑企业信息化建设的核心枢纽,其运维工作的重要性不言而喻。某数据中心深知运维工作的关键性,因此,从基础环境到网络、服务器存储以及基础软件,每一环节都力…

openeuler 22.03 lts sp4 使用 kubeadm 部署 k8s-v1.28.2 高可用集群

文章目录 [toc]废话篇这篇文章什么时候写的为什么是 openeuler为什么是 22.03 lts sp4高可用架构题外话 干活篇环境介绍系统初始化相关关闭防火墙关闭 selinux关闭 swap开启内核模块开启模块自动加载服务 sysctl 内核参数调整清空 iptables 规则安装各种依赖和工具修改 .bashrc…

R语言的基础知识R语言函数总结

R语言与数据挖掘:公式;数据;方法 R语言特征 对大小写敏感通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母)。不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头&…

Python数据分析案例60——扩展变量后的神经网络风速预测(tsfresh)

案例背景 时间序列的预测一直是经久不衰的实际应用和学术研究的对象,但是绝大多数的时间序列可能就没有太多的其他的变量,例如一个股票的股价,还有一个企业的用电量,人的血糖浓度等等,空气的质量,温度这些…

【工具推荐】Agently:一款灵活易用的 AI 应用开发框架

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正! 如果对您有帮助,烦请点赞、关注、转发、订阅专栏! 专栏订阅入口 | 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 | 往期精彩文章 【Docker】(全…

LAMP环境搭建记录:基于VM的Ubuntu虚拟机

LAMP环境搭建记录:基于VM的Ubuntu虚拟机 我们从这样的角度出发: 一、简述LAMP环境 二、搭建LAMP环境 一、什么是LAMP环境 首先,该词是复合: ​ LAMP Linux Apache MySQL PHP 其中,逐项简述为: …

基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。 通过OLED屏幕显示,设置电流阈值为80,电流小阈值为50,电压阈值为60,温度阈值…

幼儿与非幼儿识别系统源码分享

幼儿与非幼儿识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

跨域训练评估BEVal:自动驾驶 BEV 的跨数据集评估框架

跨域训练评估BEVal:自动驾驶 BEV 的跨数据集评估框架 Abstract 当前在自动驾驶中的鸟瞰图语义分割研究主要集中在使用单个数据集(通常是nuScenes数据集)优化神经网络模型。这种做法导致了高度专业化的模型,可能在面对不同环境或…

苹果手机怎么清理照片内存

在使用苹果手机的过程中,照片往往是占用大量存储空间的主要元凶。随着时间的推移,无论是拍照、截图还是通过应用下载的图片,都会逐渐堆积,消耗宝贵的内存资源。合理清理照片内存不仅可以帮助你释放空间,还能优化设备的…

【算法】动态规划—最长回文子序列

思路分析 关于”回文串“的问题,是面试中常见的,本文提升难度,讲一讲”最长回文子序列“问题,题目很好理解: 输入一个字符串 s,请找出 s 中的最长回文子序列长度。 比如输入 s"aecda"&#xff0c…

vscode中如何配置c/c++环境

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩!一、准备工作二、安装 VSCode 插件三、配置 VSCode1. 配置编译任务(tasks.json)2. 配置调试器(launch.json) 四、运行和调…

用EA和SysML一步步建模(07)蒸馏器系统上下文图01

用EA和SysML一步步建模的操作指南(01) 用EA和SysML一步步建模(02)导入ISO-80000 用EA和SysML一步步建模(03)创建包图和包的关系 用EA和SysML一步步建模(04)创建“需求组织”包图 …