【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_9">一,kafka安装和基本核心概念

kafka_11">1,kafka的安装和运行

kafka_13">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

kafka_30">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

kafkazk_64">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

在这里插入图片描述

kafka_109">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都能消费到消息
在这里插入图片描述

在这里插入图片描述

kafka_132">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.ppmy.cn/devtools/114376.html

相关文章

算法:30.串联所有单词的子串

题目 链接:leetcode链接 思路分析(滑动窗口) 这道题目类似寻找异位词的题目,我认为是寻找异位词的升级版 传送门:寻找异位词 为什么说像呢? 注意:这道题目中words数组里面的字符串长度都是相同的&…

mongodb 安装教程

mongodb 安装教程: https://blog.51cto.com/u_13646338/5449015 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.9.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.9.tgz -C /opt/module/ [roothadoop102 module]# mv mongodb-linux-…

LabVIEW编程快速提升的技术

在LabVIEW程序员的成长过程中,很多技术和概念看似简单、常用,但真正掌握并能熟练运用,往往需要踏踏实实的实践与积累。没有什么是能够一蹴而就的,唯有通过不断的专注与深入,才能获得显著的提升。要想在LabVIEW开发上取…

ld-linux-x86-64.so.2

ld-linux-x86-64.so.2是Linux操作系统上x86_64架构的动态链接器。 ld-linux使用一系列的策略和配置文件来确定在哪里查找共享库。这通常包括查看/etc/ld.so.cache文件(这是预先计算的共享库位置列表,该文件利用ldconfig工具管理),…

基于SpringBoot+Vue+MySQL的考编论坛网站

系统展示 用户前台界面 管理员后台界面 系统背景 在当前信息化高速发展的时代,考编已成为众多求职者的重要选择。然而,备考过程中信息获取、经验交流及资源分享的需求日益凸显。基于SpringBoot、Vue.js与MySQL构建的考编论坛网站应运而生,旨在…

11 vue3之插槽全家桶

插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot></slot>标签。 匿名插槽 1.在子组…

LabVIEW机械产品几何精度质检系统

随着制造业的发展&#xff0c;对产品质量的要求越来越高&#xff0c;机械产品的几何精度成为衡量其品质的重要指标。为了提高检测效率和精度&#xff0c;开发了一套基于LabVIEW的几何精度质检系统&#xff0c;该系统不仅可以自动化地进行几何尺寸的测量&#xff0c;而且能实时分…

240919-Pip先在线下载不安装+再离线安装

A. 最终效果 # 使用modelscope sdk下载模型 import os os.environ[MODELSCOPE_CACHE] 您希望的下载路径from modelscope import snapshot_download model_dir snapshot_download(opendatalab/PDF-Extract-Kit) print(f"模型文件下载路径为&#xff1a;{model_dir}/model…

快速开发与维护:探索 AndroidAnnotations

在移动应用开发的世界中&#xff0c;效率和可维护性是两个至关重要的要素。随着应用功能的不断增长和用户需求的不断变化&#xff0c;开发者们一直在寻找能够提高生产力的工具和框架。今天&#xff0c;我们将深入探讨一个能够帮助开发者实现快速开发和易于维护的框架——Androi…

基于物联网的智能控制系统设计方案——物联网智能化控制箱

一、引言 随着信息技术的迅猛进步与广泛应用&#xff0c;物联网&#xff08;IoT&#xff09;已经成为连接各种设备和服务的关键平台&#xff0c;在众多行业中展示出其潜在价值和应用可能性。智能控制作为物联网的一个重要组成部分&#xff0c;因其能提供更为便利、舒适且安全的…

滑动窗口(3)_最大连续1的数组个数III

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(3)_最大连续1的数组个数III 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …

MySQL之约束

简述&#xff1a; 概念: 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的 数据目的: 保证数据库中数据的正确、有效性和完整性。 分类 约束描述关键字非空约束限制该字段的数据不能为 NULLNOT NULL唯一约束保证该字段的所有数据都是唯一的&#xff0c;不重…

chapter16-坦克大战【1】——(自定义泛型)——day21

目录 569-坦克大战介绍 570-JAVA坐标体系 571-绘图入门和机制 572-绘图方法 573-绘制坦克游戏区域 574-绘制坦克 575-小球移动案例 576-事件处理机制 569-坦克大战介绍 570-JAVA坐标体系 571-绘图入门和机制 572-绘图方法 573-绘制坦克游戏区域 574-绘制坦克 575-小球移…

计算机毕业设计选题推荐-校园车辆管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定)

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

libmodbus:写一个modbusTCP服务

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作

因为最近在带多个新人,让其设计原理图和PCB总会发现各种电路问题点。比如TVS管接法问题。 TVS是一种限压型的过压保护器,它将过高的电压钳制至一个安全范围,藉以保护后面的电路,有着比其它保护元件更快的反应时间,这使TVS可用在防护lighting、switching、ESD等快速破坏性瞬…

Linux 中System V IPC的共享内存

1. 概念介绍 System V IPC&#xff08;Inter-Process Communication&#xff09;是一组在UNIX系统中用于进程间通信的机制&#xff0c;包括共享内存、消息队列和信号量。这些机制由System V内核提供&#xff0c;并且它们的存在不依赖于创建它们的进程&#xff0c;而是由内核管…

【计算机网络】数据链路层深度解析

概述三个重要问题封装成帧差错检测可靠传输 使用广播信道的数据链路层数据链路层的互连设备 媒体接入MAC地址集线器与交换机区别以太网交换机生成树协议STP 概述 链路就是从一个结点到相邻结点的一段物理线路&#xff0c;而中间没有任何其他的交换结点。数据链路是指把实现通信…

JavaScript网页设计案例分析

JavaScript网页设计案例分析 随着互联网技术的发展&#xff0c;JavaScript 已经成为现代网页设计中不可或缺的一部分。从简单的页面交互到复杂的应用程序开发&#xff0c;JavaScript 都发挥着至关重要的作用。本文将探讨几个运用 JavaScript 进行网页设计的经典案例&#xff0…

python 实现eulers totient欧拉方程算法

eulers totient欧拉方程算法介绍 欧拉函数&#xff08;Euler’s Totient Function&#xff09;&#xff0c;通常表示为 &#x1d711;(&#x1d45b;)&#xff0c;是一个与正整数 &#x1d45b;相关的函数&#xff0c;它表示小于或等于 &#x1d45b;的正整数中与 &#x1d45…