Kafka介绍、安装以及操作

Kafka消息中间件

1.Kafka介绍

1.1 What is Kafka?

  • 官网: https://kafka.apache.org/
  • 超过 80% 的财富 100 强公司信任并使用 Kafka ;
  • Apache Kafka 是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序;

1.2 谁在使用Kafka?

在这里插入图片描述

1.3 Kafka的起源

  • kafka 最初由 LinkedIn (领英:全球最大的面向职场人士的社交网站)设计开发的,是为了解决 LinkedIn 的数据管道问题,用于 LinkedIn 网站的活动流数据和运营数据处理工具;

    • 活动流数据:页面访问量、被查看页面内容方面的信息以及搜索情况等内容;

    • 运营数据:服务器的性能数据( CPU 、 IO 使用率、请求时间、服务日志等数据 ) ;

  • 刚开始 LinkedIn 采用的是 ActiveMQ 来进行数据交换,大约在 2010 年前后,那时的ActiveMQ 还远远无法满足 LinkedIn 对数据交换传输的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了解决这个问题, LinkedIn 决定研发自己的消息传递系统,当时 LinkedIn 的首席架构师 jay kreps 便开始组织团队进行消息传递系统的研发;

1.4 Kafka名字的由来

  • 由于 Kafka 的架构师 jay kreps 非常喜欢 franz kafka ( 弗兰茨 · 卡夫卡 ) (是奥匈帝国一位使用德语的小说家和短篇犹太人故事家,被评论家们认为是 20 世纪作家中最具影响力的一位) , 并且觉得 Kafka 这个名字很酷,因此把这一款消息传递系统取名为 Kafka ;
  • 大师门取名字也是根据自己的喜好来取名,在我们看来有可能感觉很随意!

1.5 Kafka的发展历史

2010 年底, Kafka 在 Github 上开源,初始版本为 0.7.0 ;
2011 年 7 月,因为备受关注,被纳入 Apache 孵化器项目;
2012 年 10 月, Kafka 从 Apache 孵化器项目毕业,成为 Apache 顶级项目;
2014 年, jay kreps 离开 LinkedIn ,成立 confluent 公司,此后 LinkedIn 和 confluent成为 kafka 的核心代码贡献组织,致力于 Kafka 的版本迭代升级和推广应用;

1.6 Kafka版本迭代

Kafka 前期项目版本似乎有点凌乱, Kafka 在 1.x 之前的版本,是采用 4 位版本号;
比如: 0.8.2.2 、 0.9.0.1 、 0.10.0.0… 等等;
在 1.x 之后, kafka 采用 Major.Minor.Patch 三位版本号;
Major 表示大版本,通常是一些重大改变,因此彼此之间功能可能会不兼容;
Minor 表示小版本,通常是一些新功能的增加;
Patch 表示修订版,主要为修复一些重点 Bug 而发布的版本 ;
比如: Kafka 2.1.3 ,大版本就是 2 ,小版本是 1 , Patch 版本为 3 ,是为修复 Bug 发布的第 3 个版本;
Kafka 总共发布了 8 个大版本,分别是 0.7.x 、 0.8.x 、 0.9.x 、 0.10.x 、 0.11.x 、 1.x 、 2.x 及 3.x版本,截止目前,最新版本是 Kafka 3.7.0 ,也是最新稳定版本;

2.Kafka安装

2.1 Kafka运行环境前置要求

Kafka 是由 Scala 语言编写而成, Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序,因此部署 Kakfa 的时候,需要先安装 JDK 环境;
Kafka 源码 : https://github.com/apache/kafka
Scala 官网: https://www.scala-lang.org/
本地环境必须安装了 Java 8+ ;( Java8 、 Java11 、 Java17 、 Java21 都可以);
JDK 长期支持版: https://www.oracle.com/java/technologies/java-se-support-roadmap.html

2.2 Kafka运行环境jdk安装

  1. 下载 JDK : https://www.oracle.com/java/technologies/downloads/#java17
    在这里插入图片描述

  2. 解压缩: tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local

    切换到/usr/local目录下

    在这里插入图片描述

  3. 配置 JDK 环境变量:

    1. vim /etc/profile

      export JAVA_HOME=/usr/local/jdk-17.0.10
      export PATH=$JAVA_HOME/bin:$PATH
      export CLASSPATH=.:$JAVA_HOME/lib/
      
    2. 使用source命令对修改的配置进行生效

      source /etc/profile
      
    3. 查看java版本

      在这里插入图片描述

2.3 Kafka的下载和安装

  • 获取Kafka

    • 下载最新版本的 Kafka : https://kafka.apache.org/downloads

    在这里插入图片描述

  • 安装Kafka

    • tar -xzf kafka_2.13-3.7.0.tgz -C /usr/local/
    • cd /usr/local/kafka_2.13-3.7.0
  • 启动运行Kafka

    • 启动 Kafka 环境
      注意:本地环境必须安装了 Java 8+ ;
      Apache Kafka 可以使用 ZooKeeper 或 KRaft 启动;但只能使用其中一种方式,不能同时使用;
      KRaft : Apache Kafka 的内置共识机制,用于取代 Apache ZooKeeper ;
    • Kafka 启动使用 Zookeeper &表示后台运行
      1 、启动 zookeeper : ./zookeeper-server-start.sh …/config/zookeeper.properties &
      2 、启动 kafka : ./kafka-server-start.sh …/config/server.properties &
      3 、关闭 Kafka : ./kafka-server-stop.sh …/config/server.properties
      4 、关闭 zookeeper: ./zookeeper-server-stop.sh …/config/zookeeper.properties

2.4 Zookeeper的下载和安装

2.4.1 获取zookeeper

下载最新版本的 Zookeeper : https://zookeeper.apache.org/
在这里插入图片描述

安装 Zookeeper

将下载的zookeeper传输到linux中

在这里插入图片描述

将zookeeper解压到/usr/local目录下

tar -xzf apache-zookeeper-3.9.2-bin.tar.gz -C /usr/local/

cd apache-zookeeper-3.9.2-bin

2.4.2 Zookeeper的配置和启动
  • 配置Zookeeper 到conf目录中复制配置文件

    • cp zoo_sample.cfg zoo.cfg
    • zoo.cfg 不需要修改,直接使用即可
  • 启动Zookeeper

    • 启动:zkServer.sh start

      在这里插入图片描述

      发现zookeeper启动会占用3个端口

      在这里插入图片描述

    • 关闭:zkServer.sh stop

    • zookeeper启动默认会占用8080端口,修改配置文件,添加如下配置

      cd conf

      vim zoof.cfg

      admin.serverPort=9089

      重启zookeeper

      在这里插入图片描述

2.4.3 使用独立的zookeeper启动Kafka
  1. 启动zookeeper

    • zkServer.sh start
  2. 启动Kafka

    • ./kafka-server-start.sh …/config/server.properties &

      在这里插入图片描述

2.4 使用KRaft启动运行Kafka

2.4.1 Kafka启动使用KRaft
  • 生成Cluster UUID(集群UUID): ./kafka-storage.sh random-uuid

    在这里插入图片描述

    ​ 每次返回的uuid不一样

    在这里插入图片描述

  • 格式化日志目录: ./kafka-storage.sh format -t sYhr2IwpRGisfAtnHTaSrg -c …/config/kraft/server.properties(-t 后面是uuid)

  • 启动Kafka(先将kafka和zookeeper服务停止):./kafka-server-start.sh …/config/kraft/server.properties &

  • 关闭Kafka:./kafka-server-stop.sh …/config/kraft/server.properties

2.5 使用docker启动运行Kafka

2.5.1 docker安装

安装前查看系统是否已经安装了 Docker :
yum list installed | grep docker
卸载 Docker(-y参数 自动确认的意思 remove后面是已安装列表中的名字) :
yum remove docker.x86_64 -y
yum remove docker-client.x86_64 -y
yum remove docker-common.x86_64 -y
安装 Docker :
yum install docker -y
注:这种方式安装的 Docker 版本比较旧;(查看版本: docker -v )

在这里插入图片描述

安装最新版的 Docker(须先删除老版docker) :
1 、 yum install yum-utils -y
2 、 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3 、 yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
查看是否安装成功:
查看 docker 版本: docker --version ( docker version , docker -v )

在这里插入图片描述

2.5.2 docker启动

​ 启动: systemctl start docker 或者 service docker start
​ 停止: systemctl stop docker 或者 service docker stop
​ 重启: systemctl restart docker 或者 service docker restart
​ 检查 Docker 进程的运行状态: systemctl status docker 或者 service docker status
​ 查看 docker 进程: ps -ef | grep docker
​ 查看 docker 系统信息: docker info
​ 查看所有的帮助信息: docker --help
​ 查看某个 commond 命令的帮助信息: docker commond --help

使用 Docker 镜像启动
1 、拉取 Kafka 镜像: docker pull apache/kafka:3.7.0
2 、启动 Kafka 容器(须先把虚拟机的Kafka停止): docker run -p 9092:9092 apache/kafka:3.7.0
查看已安装的镜像: docker images
删除镜像: docker rmi apache/kafka:3.7.0

3.Kafka操作

3.1 创建主题Topic

3.1.1 使用Kafka之前,第一件事情是必须创建一个主题(topic)
  • 主题(Topic)类似于文件系统中的文件夹;

  • 主题(Topic)用于存储事件(Events)

    • 事件(Events)
    • 也称为记录或消息,比如支付交易、手机地理位置更新、运输订单、物联网设备或医疗设备的传感器测量数据等等都是事件( Events );
    • 事件( Events )被组织和存储在主题( Topic )中
    • 简单来说,主题( Topic )类似于文件系统中的文件夹,事件( Events )是该文件夹中的文件;
  • 创建主题使用:kafka-topics.sh脚本;

    • 不带任何参数回告知该脚本如何使用:./kafka-topics.sh

    • 创建主题:./kafka-topics.sh --create --topic hello --bootstrap-server localhost:9092

      在这里插入图片描述

    • 列出所有的主题:./kafka-topics.sh --list --bootstrap-server localhost:9092

      在这里插入图片描述

    • 删除主题:./kafka-topics.sh --delete --topic hello --bootstrap-server localhost:9092

    • 显示主题详细信息:./kafka-topics.sh --describe --topic hello --bootstrap-server localhost:9092

      在这里插入图片描述

    • 修改主题信息:./kafka-topics.sh --alter --topic hello --partitions 3 --bootstrap-server localhost:9092

      在这里插入图片描述

3.2 在主题(Topic)中写入一些事件(Events)

  • Kafka客户端通过网络与Kafka Brokers进行通信,可以写(或读)主题Topic中的事件Events;

    在这里插入图片描述

  • Kafka brokers一旦受到事件Event,

  • 就会将事件 Event 以持久和容错的方式存储起来,可以永久地
    存储;

  • 通过 kafka-console-producer.sh 脚本工具写入事件 Events ;

    • 不带任何参数会告知该脚本如何使用: ./kafka-console-producer.sh
    • ./kafka-console-producer.sh --topic hello --bootstrap-server localhost:9092
    • 每一次换行是一个事件 Event ;
    • 使用 Ctrl+C 退出,停止发送事件 Event 到主题 Topic ;

    在这里插入图片描述

3.3 从主题(Topic)中读取事件(Events)

在这里插入图片描述

  • 使用 kafka-console-consumer.sh 消费者客户端读取之前写入的事件 Event :
    • 不带任何参数会告知该脚本如何使用: ./kafka-console-consumer.sh
    • ./kafka-console-consumer.sh --topic hello --from-beginning --bootstrap-server localhost:9092
    • –from-beginning 表示从 kafka 最早的消息开始消费 不加表示读取最新消息
    • 使用 Ctrl+C 停止消费者客户端;
  • 事件 Events 是持久存储在 Kafka 中的,所以它们可以被任意多次读取;

在这里插入图片描述

3.4 外部环境连接Kafka

  1. 启动 Kafka 容器: docker run -p 9092:9092 apache/kafka:3.7.0 &
  2. 安装外部连接工具;
  3. 外部连接工具连接 Kafka ;

在这里插入图片描述

3.4.1 外部环境无法连接Kafka
3.4.1.1 复制docker中kafka的配置文件到linux中
  • 文件输入:提供一个本地 kafka 属性配置文件,替换 docker 容器中的默认配置文件;
  • cd /usr/local
  • mkdir docker
  • docker ps
  • docker run -p 9092:9092 apache/kafka:3.7.0
  • docker exec -it 容器 id /bin/bash
  • 把 docker 容器中的文件复制到 linux 中:
    • docker cp 容器id:/etc/kafka/docker/server.properties /user/local/docker

在这里插入图片描述

3.4.1.2 修改linux的配置文件和文件映射
  • 配置文件: server.properties
  • listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
  • advertised.listeners=PLAINTEXT://虚拟机ip:9092
    • advertise 的含义表示宣称的、公布的, Kafka 服务对外开放的 IP 和端口 ;
  • 文件映射: docker run --volume /usr/local/kafka_2.13-3.7.0/docker:/mnt/shared/config -p 9092:9092 apache/kafka:3.7.0
3.4.1.3 测试连接

创建topic

./kafka-topics.sh --create --topic hello --bootstrap-server localhost:9092

idea使用kafka插件进行连接

在这里插入图片描述

3.5 Kafka图形界面连接工具

  • Kafka 图形界面连接工具:
    • Offset Explorer ( 以前叫 Kafka Tool) ,官网: https://www.kafkatool.com/
    • CMAK (以前叫 Kafka Manager ) 官网: https://github.com/yahoo/CMAK
    • EFAK (以前叫 kafka-eagle ) 官网: https://www.kafka-eagle.org/
3.5.1 CMAK(以前叫 Kafka Manager )
  • 一个 web 后台管理系统,可以管理 kafka ;

  • 项目地址: https://github.com/yahoo/CMAK

  • 注意该管控台运行需要 JDK11 版本的支持;

  • 下载: https://github.com/yahoo/CMAK/releases

  • 下载下来是一个 zip 压缩包,直接 unzip 解压:

  • unzip cmak-3.0.0.6.zip

  • 解压后即完成了安装;

  • 基于 zookeeper 方式启动 kafka 才可以使用该 web 管理后台,否则不行;

    • 1 、 CMAK 配置:
      • 修改 conf 目录下的 application.conf 配置文件:
      • kafka-manager.zkhosts=“192.168.11.128:2181”
      • cmak.zkhosts=“192.168.11.128:2181”
    • 2 、 CMAK 启动:
      • 切换到 bin 目录下执行:
      • ./cmak -Dconfig.file=…/conf/application.conf -java-home /usr/local/jdk-11.0.22
      • 其中 -Dconfig.file 是指定配置文件, -java-home 是指定 jdk11 所在位置,如果机器上已经是 jdk11 ,则不需要指定;
    • 3 、 CMAK 访问:
      • 启动之后 CMAK 默认端口为 9000 ,访问: http://192.168.11.128:9000/
3.5.2 EFAK (以前叫 kafka-eagle )
  • EFAK 一款优秀的开源免费的 Kafka 集群监控工具;(国人开发并开源)
    • 官网: https://www.kafka-eagle.org/
    • Github : https://github.com/smartloli/EFAK
  • EFAK 下载与安装:
    • 下载: https://github.com/smartloli/kafka-eagle-bin/archive/v3.0.1.tar.gz
    • 安装,需要解压两次:
      1. tar -zxvf kafka-eagle-bin-3.0.1.tar.gz
      2. cd kafka-eagle-bin-3.0.1
      3. tar -zxvf efak-web-3.0.1-bin.tar.gz
      4. cd efak-web-3.0.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5819.shtml

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

相关文章

【校招】校园招聘中的签约环节,面完HR后的流程(意向书,offer选择与三方协议)

【校招】校园招聘中的签约环节,面完HR后的流程(意向书,offer选择与三方协议) 文章目录 一、面完HR后的流程1、口头oc、谈薪(两个电话)2、邮件意向书、带薪offer(两封邮件)3、签三方&…

axios.get请求 重复键问题??

封装的接口方法: 数据: 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组,但是通常 HTTP 请求的查询参数不支持使用相同的键(key)名多次。如…

职场商务口才培训沙龙(3篇)

职场商务口才培训沙龙(3篇) 职场商务口才培训沙龙是一个为职场人士提供交流、学习和提升商务口才能力的平台。以下是关于职场商务口才培训沙龙的三篇内容概述: **篇:基础沟通与表达技巧沙龙 主题:构建有效的商务沟通…

带宽的理解-笔记

带宽的理解 带宽(频带宽度):是指电磁波最高频率和最低频率的差值,这一段频率被称为带宽。 举例说明 人耳能听到的频率范围是20赫兹到2万赫兹。换句话说,人而只对20赫兹至2万赫兹的声音频率有反应,超出或低于这一频率范围的声音我…

B+树详解与实现

B树详解与实现 一、引言二、B树的定义三、B树的插入四、B树的删除五、B树的查找效率六、B树与B树的区别和联系 一、引言 B树是一种树数据结构,通常用于数据库和操作系统的文件系统中。它的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间…

ngrinder项目-本地调试遇到的坑

前提-maven mirrors配置 <mirrors><!--阿里公有仓库--><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</ur…

借助Aspose.SVG图像控件,在线将 PNG 转换为 XML

Aspose.SVG for .NET 是用于SVG文件处理的灵活库&#xff0c;并且与其规范完全兼容。API可以轻松加载&#xff0c;保存和转换SVG文件&#xff0c;以及通过其文档对象模型&#xff08;DOM&#xff09;读取和遍历文件的元素。API独立于任何其他软件&#xff0c;使开发人员无需使用…

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法&#xff0c;它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制&#xff0c;比如日志必须是连续的&#xff0c;只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上&#xff0c;Raft算法相对…

基于Springboot的大学生社团活动平台

基于SpringbootVue的大学生社团活动平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 社团信息 社团活动 社团论坛 社团资讯 后台登录 后台首页 学生管理 社…

医疗大模型华佗GPT-2:医学问答超越GPT-4,通过2023年国家执业药师考试

前言 随着人工智能技术的快速发展&#xff0c;特别是在自然语言处理(NLP)领域&#xff0c;大型预训练模型如GPT系列已经显示出在多个领域的强大应用潜力。最近&#xff0c;华佗GPT-2医疗大模型的发布&#xff0c;不仅标志着人工智能在医学领域的一大进步&#xff0c;更是在202…

Mybatis逆向工程的2种方法,一键高效快速生成Pojo、Mapper、XML,摆脱大量重复开发

一、写在开头 最近一直在更新《Java成长计划》这个专栏&#xff0c;主要是Java全流程学习的一个记录&#xff0c;目前已经更新到Java并发多线程部分&#xff0c;后续会继续更新&#xff1b;而今天准备开设一个全新的专栏 《EfficientFarm》。 EfficientFarm&#xff1a;高效农…

eaapp账号注销怎么操作 简单几步完成ea账号注销

eaapp账号注销怎么操作 简单几步完成ea账号注销 有许多玩家在注册ea平台账户的时候&#xff0c;会出现账号输错&#xff0c;地区选择错误等问题&#xff0c;导致自己没有注册成功心仪的账号&#xff0c;想要将账号注销却又不知道该如何操作&#xff0c;今天小编就为大家带来详…

mac idea 下载spring 源码遇到的问题

一、Kotlin: warnings found and -Werror specified 这个问题网上看了很多文章多说是缺少cglib、objenesis包。然后执行了 实际还是没有什么用 解决&#xff1a; 最后自己看了一下前面一个警告。说的就是版本太低。所以我觉得是这个前置问题导致的 然后搜索了改这个Kotlin版本…

springboot项目组合定时器schedule注解实现定时任务

springboot项目组合定时器schedule注解实现定时任务&#xff01; 创建好springboot项目后&#xff0c;需要在启动类上增加注解开启定时器任务 下图所示&#xff1a; 增加这个注解&#xff0c;启动项目&#xff0c; package com.example.scheduledemo.util;import org.springf…

C++-5

完成特殊成员函数 #include <iostream>using namespace std;class Person {string name;int *age; public://构造&#xff0c;析构&#xff0c;拷贝构造&#xff0c;拷贝赋值Person():age(new int ){}Person(int *age,string name):name(name),age(new int (*(age))){}~…

unity制作app(2)--主界面

1.先跳转过来&#xff0c;做一个空壳&#xff01;新增场景main为4号场景&#xff01; 2.登录成功跳转到四号场景&#xff01; 2.在main场景中新建canvas&#xff0c;不同的状态计划用不同的panel来设计&#xff01; 增加canvas和底图image 3.突然输不出来中文了&#xff0c;浪…

【C语言加油站】字符函数与字符串函数

字符函数与字符串函数 导言一、字符分类函数1.1 字符分类函数的用法 二、字符转换函数2.1 字符转换函数的用法 三、字符串函数3.1 成员3.2 strlen函数3.2.1 size_t类型3.2.2 strlen的易错点3.2.2 strlen的使用3.2.3 strlen与sizeof 3.3 strcpy函数和strncpy函数3.3.1 strcpy和s…

unity 专项一 localPosition与anchoredPosition(3D)的区别

一 、RectTransform 概念 1、RectTransform继承自Transform&#xff0c;用于描述矩形的坐标(Position)&#xff0c;尺寸(Size)&#xff0c;锚点(anchor)和中心点(pivot)等信息&#xff0c;每个2D布局下的元素都会自动生成该组件。 2、当我们在处理UI组件时&#xff0c;往往容易…

VTK 的可视化方法:Glyph

VTK 的可视化方法&#xff1a;Glyph VTK 的可视化方法&#xff1a;Glyph标量、向量、张量将多边形数据的采集点法向量标记成锥形符号参考 VTK 的可视化方法&#xff1a;Glyph 模型的法向量数据是向量数据&#xff0c;因此法向量不能像前面讲到的通过颜色映射来显示。但是可以通…

【计算机网络】网络层总结

目录 知识梗概 IP地址 子网划分 IP包头格式 路由 网络层协议 ARP病毒/ARP欺骗 知识梗概 IP地址 IP相关介绍&#xff1a;机器之间需要交流&#xff0c;必须要一个地址才能找到对应的主机&#xff0c;IP地址是主机的一种表示&#xff0c;保证主机之间的正常通信&#xff…