Kafka 安装 快速入门

news2024/12/23 14:20:12

Kafka 安装 快速入门

Apache Kafka是流行的用于大规模收集、处理、存储和分析数据的开源流处理系统。它以其卓越的性能、低延迟、容错和高吞吐量而闻名,能够每秒处理数千条消息。常用来构建数据管道、利用实时数据流、实现系统监控、数据集成。

在这里插入图片描述

如上图,在kafka系统中,一个完整的事件消息处理流程,由以下3个部分组成:

  • Producer - 消息生产者,作用是发布、写入事件消息,包括从其他系统导入、导出事件流消息
  • Topic - 消息主题,kafka中的消息按照topic的维度进行数据存储(持久化到磁盘中),每一个Message必须归属topic
  • Consumer - 消息消费者 对消息进行业务处理

整个事件处理流程是以异步、分布式、高度可扩展、弹性、容错和安全的方式提供的。Kafka提供多种部署方式,满足不同的部署场景,它可以部署在物理机、虚拟机、容器上,也可以部署在本地和云中。

工作机制

kafka是CS架构的分布式系统,由客户端、服务器端组成,基于高性能的TCP网络协议进行数据通信。通常情况下,我们将服务器端称之为Broker,上面提到的生产者、消费者都属于客户端。

在这里插入图片描述

  • 服务器端

    kafka可以由多个运行实例组成集群, 集群中节点可以跨越多个数据中心。服务器端负责对消息数据进行持久化操作,Kafka集群具有高度的可扩展性和容错性:如果它的任何服务器发生故障,其他服务器将接管它们的工作,以确保连续运行而不会丢失任何数据。

  • 客户端

    kafka客户端允许编写分布式应用程序和微服务,即即使在网络问题、机器故障的情况下,也可以并行、大规模、容错的读取、写入、处理事件流消息。kafka官方提供多种语言的客户端集成工具,如Java、Go、Python、C/C++等其他编程工具

事件消息

事件消息记录真实世界发生的业务信息,也成为消息或者事件记录。向kafka读写数据时,数据会以事件消息的形式进行操作,从概念上讲,事件消息至少包含键、值、时间戳等相关信息。如

  • 键名称: “Alice”
  • 值信息: “Made a payment of $200 to Bob” (向bob支付200美元)
  • 时间戳: “Jun. 25, 2020 at 2:06 p.m.”

应用场景

kafka典型的应用场景如下

  • 消息中间件

  • 网站行为追踪

  • 系统监控

  • 日志聚合

  • 流处理

  • 事件源

  • 提交日志

快速入门

下载

wget https://dlcdn.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz

tar -xzf kafka_2.13-3.3.1.tgz

cd kafka_2.13-3.3.1

启动

启动kafka必须安装JDK8及以上的版本,本机安装JDK17;同时使用第三方注册中心才能启动,目前Kafka支持使用ZooKeeper、KRaft启动。

  • Zookeeper

    # 启动Zookeeper 
    bin/zookeeper-server-start.sh config/zookeeper.properties
    # 启动kafka 
    bin/kafka-server-start.sh config/server.properties
    

    在这里插入图片描述

  • Kraft

    # 创建集群ID
    KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
    
    # 格式化日志目录
    $ ./bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
    Formatting /tmp/kraft-combined-logs with metadata.version 3.3-IV3.
    
    # 启动服务
    bin/kafka-server-start.sh config/kraft/server.properties
    

    在这里插入图片描述

创建topic

Kafka是一个分布式事件流平台,它允许您在多台机器上读、写、存储和处理事件(文档中也称为记录或消息)。

事件流消息包括支付交易、移动电话的地理位置更新、发货订单、物联网设备或医疗设备的传感器测量等。这些事件按TOPIC(主题)组织和存储。非常简单,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。因此,在发送消息之前,必须创建一个主题:

# 启动另外一个终端 在kafka的安装目录执行
$ ./bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
Created topic quickstart-events.

验证下之前创建的 quickstart-events主题

$ ./bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Topic: quickstart-events	TopicId: A73vhZBfTZiSMhnIoZCm4Q	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: quickstart-events	Partition: 0	Leader: 1	Replicas: 1	Isr: 1

如上信息显示主题相关的分区信息,暂时忽略,后面再详细介绍。

生产消息

使用Kafka自带的脚本,作为生产者客户端,将事件消息写入之前创建的主题 - quickstart-events中,默认情况下,输入的每一行都将生成单独的事件消息写入主题。

$ ./bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092

在这里插入图片描述

按住 Ctrl-C 停止生产者写入消息。

消费消息

启动另一个终端会话,运行控制台使用消费者客户端 读取刚刚创建的事件消息:

$ ./bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
hello world
this is kafka
# --from-beginning 表示每次都是从头开始消费数据;不指定的话默认从上一次消费的位置开始

现在可以一边在生产者生产消息,一边观察到消费者消费到最新的数据。

导入导出

存在的业务场景之一:需要与现有的系统(如关系数据库、文件、其他消息中间件)中的数据进行集成(导入、导出操作)。Kafka Connect允许开发者将外部系统中的数据连续导入到kafka,反之亦然。

接下来看如何使用简单的连接器运行kafka connect,将外部的数据导入到kafka主题中。

  • 添加插件

    # 编辑配置文件
    vim config/connect-standalone.properties
    # 添加配置 保存并退出
    plugin.path=libs/connect-file-3.3.1.jar
    
  • 添加模拟数据

    echo -e "foo\nbar" > test.txt
    
  • 模拟导入

    # 指定运行的数据来源、数据存储
    # connect-file-source.properties 文件指明了数据来源
    # connect-file-sink.properties 文件指明了数据存储的终点
    ./bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties
    
    # connect-file-source.properties 指定工作线程数、来源文件、topic
    ...
    tasks.max=1
    file=test.txt
    topic=connect-test
    
    # connect-file-sink.properties 指定工作线程数、来源存储文件名、topic
    tasks.max=1
    file=test.sink.txt
    topics=connect-test
    
  • 查看结果

    $ more test.sink.txt
    foo
    bar
    

性能测试脚本

Kafka除了之前提到过的生产者、消费者脚本用于简单的消息发送、消费测试之外。在bin目录下,还提供了用于性能吞吐量测试脚本,分别为

  • kafka-producer-perf-test.sh
  • kafka-consumer-perf-test.sh

生产环境中,Kafka性能需要硬件的支持,包括cpu、带宽、内存、磁盘IO,同时也需要对系统进行调优,如Linux文件句柄大小、JVM参数等等。此处仅介绍相关脚本的使用。

生产者脚本

kafka-producer-perf-test.sh 脚本是kafka提供用于测试消息生产者性能的工具,该脚本可以计算出指定时间内系统的吞吐、和平均延迟。

$ bin/kafka-producer-perf-test.sh --topic perf-test --num-records 100000 --record-size 100 --throughput -1 --producer-props bootstrap.servers=127.0.0.1:9092 acks=-1 compression.type=lz4

100000 records sent, 82850.041425 records/sec (7.90 MB/sec), 108.13 ms avg latency, 519.00 ms max latency, 110 ms 50th, 133 ms 95th, 135 ms 99th, 142 ms 99.9th.

成功发送10万条数据,吞吐量为 82850条数据/s; 7.90 MB/sec.平均时延为 108.13 ms,最大时延为 519.00 ms,50 % 的消息延时在 110ms 内,95 % 的消息延时在 133 ms 内,99 % 的消息延时在 142 毫秒内。

消费者脚本

跟生产者性能测试脚本类似,kafka-consumer-perf-test.sh用于测试消费端的性能,可以便捷的计算出消费者的性能信息。

 ./bin/kafka-consumer-perf-test.sh --bootstrap-server 127.0.0.1:9092 --topic quickstart-events --messages 100000 --threads 8 --reporting-interval 1000

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

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

相关文章

【MindStudio训练营第一季】基于MindX的U-Net网络的工业质检实践作业

1.1 作业介绍 1.1.1 作业背景 随着新一轮科技革命和产业变革的加速演进,全球各国都在借助新技术推动制造业升级,从工业2.0自动化开始兴起,到工业3.0信息化普及,如今正迈向工业4.0智能化。借助IoT、工业大数据、人工智能等先进技…

“==” 操作符 与 equals 方法的区别,toString

“” 操作符 与 equals 方法的区别,toString 每博一文案 读过这样一段话:很多人都羡慕我的坚强独立,夸赞我的善解人意。无论什么事情, 我都会把别人放在首位,宁愿自己吃亏,也会尽力满足别人的需求&#xf…

Allegro关闭线段显示不连续效果操作指导

Allegro关闭线段显示不连续效果操作指导 用Allegro进行PCB设计的时候偶尔会出现线段不连续的情况,尤其是在线段拐弯处,实际上并不是线段没有连接上,只是一个显示效果而已,如下图 如何去关闭这个显示效果,具体操作如下 选择Setup-Design Parameter 选择Display 取消勾…

java中实现分页的常见几种方式

文章目录1. 前言2. 先说结论3. 例子1. 数据库SQL的限制条件(limit、fetch)2. 使用List集合的截取功能实现3. 插件PageHelper1. 前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式&#xff…

IIC总线(二)-----IIC控制器与MPU6050

1.Exynos_4412下的IIC控制器 Exynos 4412 SCP简化指令集计算机(RISC)微处理器支持四个多主控间集成电路(I2C)总线串行接口。为了在连接到I2C总线的总线主机和外围设备之间传输信息,我们使用了一条专用的串行数据线&am…

IO流(一)

IO流的思维导图如下所示: 我们下来对文件、IO流原理及流的分类,节点流(访问文件的、访问数组的、访问管道的)和处理流(缓冲流、对象流、管道流),输入流(InputStream和Reader)和输出流…

[附源码]Nodejs计算机毕业设计基于协同过滤技术的旅游景点购票系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Python+Selenium自动化测试详细教程

前言 PythonSelenium 来实现的web端自动化, 以下演示会用到禅道、百度和自己编写的html. 一、准备工作 1、安装 安装Python 3安装selenium库,命令:pip install selenium搭建禅道环境 2、导入浏览器驱动 selenium操作不同的浏览器,需要下…

Windows10 系统下载网址推荐(二)

Windows10 系统下载网址推荐(二)1. 计算机操作系统概述2.HelloWindows3. 山己几子木4. xitongku5. TechBench结束语1. 计算机操作系统概述 操作系统(Operating System,OS)是一组主管并控制计算机操作、运用和运行硬件…

设计一个接口务必考虑好这14个基本点

目录:导读 前言 1、入参合法性校验 2、接口的版本控制 3、接口考虑幂等性 4、接口考虑防止重复请求 5、提高接口的响应时间 6、接口限流控制 7、黑白IP白名单 8、敏感数据脱敏 9、请求接口的先决条件-token 10、记录接口请求日志 11、调用第三方接口要考…

分解优化react对redux的基础使用

之前写了 react18 通过redux 做一个简单的状态管理基站 但代码确实相对比较乱 这次进行一些小封装和分解 优化一下管理质量 首先 我们创建一个 react项目 然后在项目中引入 npm install redux --save在src目录下创建 reducers 文件夹 下面创建 counter.js counter.js 参考代码…

有什么免费python安装包?

前言 Python的安装涉及到:Python编辑器、Python解释器、Python包管理工具(pip)。因此,首先我们要搞清楚这三个东西都是啥。 Python编辑器 正如在电脑上编辑文档需要用Word、处理数据需要用Excel、做演示文稿需要用PPT、修图需要…

git add 命令详解

1. 前言 2. git add 基本操作 3. git add 命令参数 4. git add 背后做了什么 1. 前言 众所周知,git 中有工作区、暂存区、版本库三大组成部分 工作区: 电脑中能看到的目录,也就是写代码的地方 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下…

【图像分割】灰狼算法最小交叉熵多阈值图像分割【含Matlab源码 903期】

⛄一、最小交叉熵多阈值图像分割简介 1 单阈值分割 设有两个概率分布P{p1, p2, …, pN}和Q{q1, q2, …, qN}, 交叉熵度量它们之间的信息量差异。其对称形式为 交叉熵既可看成是采用P取代Q作为单个系统概率分布时系统信息量变化的期望值, 也可看成是两个概率系统P和Q之间的信息…

CSAPP-Lab5 CacheLab解析

Review Cache Struct A cache is a set of 2s2^s2s cache setsA cache set is a set of E cache lines if E1, it is called “direct-mapped” Each cache line stores a blockTotal Capacity S * B * E 由此,我们可以写出cache line和cache的结构: …

微服务框架 SpringCloud微服务架构 服务异步通讯 50 消息可靠性 50.4 失败重试机制 50.4.1 消费者失败重试

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯50 消息可靠性50.4 失败重试机制50.4.1 消费者失败重试50 消息可靠性 50.4 失败重试机制 50…

可路由计算引擎实现前置数据库

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主&#x1f3…

非零基础自学Golang 第9章 结构体 9.1 理解结构体 9.2 定义结构体 9.3 实例化结构体

非零基础自学Golang 文章目录非零基础自学Golang第9章 结构体9.1 理解结构体9.2 定义结构体9.3 实例化结构体9.3.1 标准实例化9.3.2 new函数实例化9.3.3 取地址实例化9.3.4 访问成员第9章 结构体 在Go语言官网的常见问题解答一栏中,有这样一个问题:“Is…

Fiddler(7):fiddler设置弱网测试

弱网测试 概念:弱网看字面意思就是网络比较弱,我们通称为信号差,网速慢。 意义:模拟在地铁、隧道、电梯和车库等场景下使用APP ,网络会出现延时、中断和超时等情况。 Fiddler弱网测试流程: 一、限速操作…

基于云开发的微信小程序、QQ小程序详细教程(更新中)

云开发解决方案 小程序云开发解决方案 为企业和开发者提供一站式后端云服务,无需管理基础架构,一次开发多端运行,腾讯云和微信联合出品。 云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环…