Kafka-初识

一、Kafka是什么?

Kafka是一个高度可扩展、弹性、容错和安全的分布式流处理平台,由服务器和客户端组成,通过高性能TCP网络协议进行通信。它可以像消息队列一样生产和消费数据。可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地和云中。

二、名词解析

1、事件(Event)

事件记录了世界上或企业中“发生了一些事情“的事实。它也被称为留档中的记录或消息。当向Kafka读取或写入数据时,以事件的形式执行此操作。从概念上讲,事件具有键、值、时间戳和可选的元数据头。下面是一个示例事件:

Event key :Alice

Event value: 向Bob支付了200美元

Event timestamp:2024年10月8日下午2:06

2、事件流(Event Streaming)

事件流是以事件流的形式从数据库、传感器、移动设备、云服务和软件应用程序等事件源实时捕获数据的做法;持久地存储这些事件流以供以后检索;实时和回顾性地操纵、处理和响应事件流;并根据需要将事件流路由到不同的目的地技术。因此,事件流确保了数据的连续流动和解释,以便在正确的时间将正确的信息放在正确的位置。

我们可以将事件流用于一系列实时场景,比如实时支付、实时跟踪和监控、实时反馈等

3、Kafka服务器

Kafka作为一个或多个服务器的集群运行,这些服务器可以跨越多个数据中心或云区域。其中一些服务器构成了存储层,称为代理。其他服务器运行Kafka Connect,以连续导入和导出数据作为事件流,将Kafka与现有系统(如关系数据库和其他Kafka集群)集成。为了让你实现关键任务用例,Kafka集群具有高度的可扩展性和容错性:如果它的任何服务器发生故障,其他服务器将接管它们的工作,以确保连续运行而不会丢失任何数据。

Kafka服务器也是一个主从架构,一个Kafka有一个或多个Broker,其中有一个Broker会依赖Zookeeper被选举为Controller。Controller负责管理集群中所有分区和副本状态。

4、Kafka客户端

它们允许我们编写分布式应用程序和微服务,即使在网络问题或机器故障的情况下,也能并行、大规模、容错地读取、写入和处理事件流。Kafka附带了一些这样的客户端,这些客户端由Kafka社区提供的数十个客户端增强:客户端可用于Java和Scala,包括更高级别的Kafka Streams库,用于Go、Python、C/C++和许多其他编程语言以及REST API。

4.1、生产者(Producer)

生产者是那些向Kafka发布(写入)事件的客户端应用程序

4.2、消费者(Consumer)

消费者是那些订阅(读取和处理)这些事件的应用程序

在Kafka中,生产者和消费者是完全解耦的,彼此不可知,这是实现Kafka众所周知的高可扩展性的关键设计元素。例如,生产者永远不需要等待消费者。Kafka提供了各种保证,例如能够只处理一次事件。

5、主题(topic)

事件被组织并持久地存储在主题中。非常简单,主题类似于文件系统中的文件夹,事件就是该文件夹中的文件。例如主题名称可以是“付款”。Kafka中的主题总是多生产者和多订阅者的:一个主题可以有零个、一个或多个生产者向其写入事件,也可以有零、一个、或多个消费者订阅这些事件。主题中的事件可以根据需要随时读取——与传统的消息传递系统不同,事件在使用后不会被删除。相反,您可以通过按主题配置设置来定义Kafka应该保留事件多长时间,之后旧事件将被丢弃。Kafka的性能在数据大小方面实际上是恒定的,因此长时间存储数据是完全可以的。

6、分组(group)

该分组是针对消费者来分组,每个consumer都属于一个特定的组,多个consumer可以共同消息一个Topic下的消息。每个consumer消费其中的部分分区数据。

7、分区 (partition)

主题(topic)是分区的,这意味着一个主题分布在位于不同Kafka代理上的多个“桶”上。这种数据的分布式放置对于可扩展性非常重要,因为它允许客户端应用程序同时从多个代理读取数据和向多个代理写入数据。当一个新事件发布到一个主题时,它实际上会附加到该主题的一个分区上。具有相同事件密钥(例如,客户或车辆ID)的事件被写入同一分区,Kafka保证给定主题分区的任何消费者将始终以与写入顺序完全相同的顺序读取该分区的事件。

下面的官网上的解释图:

从图中可以看出:该主题有四个分区P1-P4。两个不同的生产者客户端通过网络将事件写入主题的分区,彼此独立地向主题发布新事件。具有相同键的事件(在图中用它们的颜色表示)被写入同一个分区。请注意,如果合适,两个生产者都可以写入同一个分区。

8、副本(replicated)

为了使数据具有容错性和高可用性,每个主题都可以复制,甚至可以跨地理区域或数据中心复制,这样总有多个代理拥有数据副本,以防出现问题、您想对代理进行维护等等。常见的生产设置是复制系数为3,即您的数据总是有三个副本。此复制在主题分区级别执行。

请注意:这里的副本是用来提高容错和高可用的,并不是用来提升读写性能的,因此读写只发生在主的那份数据上。

9、偏移量(Offset 

偏移量是针对分区的,是consumer在对应分区消费的水位线

三、API

1、 Admin API:用于管理和检查主题、代理和其他Kafka对象

2、Producer API:将事件流发布(写入)到一个或多个Kafka主题

3、Consumer API:用于订阅(读取)一个或多个主题并处理产生给它们的事件流

4、Kafka Streams API:用于实现流处理应用程序和微服务。它提供了更高级的函数来处理事件流,包括转换、聚合和连接等有状态操作、窗口、基于事件时间的处理等。从一个或多个主题读取输入,以生成对一个或更多主题的输出,从而有效地将输入流转换为输出流。

5、Kafka Connect API:用于构建和运行可重复使用的数据导入/导出连接器,这些连接器消耗(读取)或生成(写入)来自外部系统和应用程序的事件流,以便与Kafka集成。例如,像PostgreSQL这样的关系数据库的连接器可能会捕获一组表的每一个更改。然而,在实践中,通常不需要实现自己的连接器,因为Kafka社区已经提供了数百个即用型连接器。

四:入门小例子

下面我们用官网给的快速入门小例子来实践下,为了方便我使用cdh安装了Kafka

1、创建一个主题(topic)来存储事件

Kafka是一个分布式事件流平台,可让您读取、写入、存储和处理 事件(也称为记录或 留言在留档) 跨许多机器。

事件是支付交易、来自手机的地理位置更新、运输订单、传感器测量 来自物联网设备或医疗设备等等。这些事件被组织和存储在 主题。 非常简化,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。

因此,在编写第一个事件之前,我们必须创建一个主题。打开一个终端窗口并运行:

kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2

结果:

 查看topic列表

kafka-topics -list --zookeeper cdh1:2181

结果:

 查看topic详情

kafka-topics --describe --zookeeper cdh1:2181 --topic quickstart-events

结果:

调整topic分区数

kafka-topics --zookeeper cdh1:2181 --alter --topic quickstart-events --partitions 3

 结果:

查看 topic 指定分区 offset

kafka-run-class kafka.tools.GetOffsetShell --topic quickstart-events  --time -1 --broker-list cdh1:9092 --partitions 0 

 结果:

 删除topic

kafka-topics --create --topic quickstart-temp --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2
kafka-topics --delete --zookeeper cdh1:2181 --topic quickstart-temp

结果:

2、向主题(topic)写入事件

Kafka客户端通过网络与Kafka代理通信以写入(或读取)事件。一旦收到,代理将以持久和容错的方式存储事件,只要您需要-甚至可以永远存储。

运行控制台生产者客户端以将一些事件写入刚刚新建的主题。默认情况下,输入的每一行都将导致一个单独的事件写入主题。

kafka-console-producer --topic quickstart-events --broker-list cdh1:9092,cdh2:9092,cdh3:9092

结果:

 可以随时使用Ctrl-C停止生产者客户端。

3、从主题(topic)读取事件

打开另一个终端会话并运行控制台消费者客户端以读取刚刚创建的事件:

kafka-console-consumer --topic quickstart-events --from-beginning --bootstrap-server cdh1:9092,cdh2:9092,cdh3:9092

结果:

同样可以通过Ctrl-C停止消费者客户端

如果我们用kafka-console-producer命令再随意写一些事件,消费者客户端会实时出现打印

如果我们再新的会话窗口再启一个消费者客户端呢,会出现如下结果:

为什么新的消费者客户端的打印顺序出现了不同?因为我们有三个分区,如果我们指定分区去消费就会得到顺序的数据

kafka-console-consumer --topic quickstart-events --from-beginning --bootstrap-server cdh1:9092,cdh2:9092,cdh3:9092 --partition 2

结果:

分区0的数据为:This is my first event

分区1的数据为:222

此时我们查看下group的数量,发现是两个,也就是如果我们不指定group,就默认给我们创建一个新的group

kafka-consumer-groups --bootstrap-server cdh1:9092,cdh2:9092,cdh3:9092 --list

结果:

 

4、使用Kafka Connect将数据作为事件流导入/导出

我们可能在关系数据库或传统消息传递系统等现有系统中拥有大量数据,以及已经使用这些系统的许多应用程序。Kafka Connect允许我们不断地将数据从外部系统摄取到Kafka中,反之亦然。它是一个可扩展的工具,运行连接器,实现与外部系统交互的自定义逻辑。因此,将现有系统与Kafka集成非常容易。为了使这一过程更容易,有数百个这样的连接器可供选择。

我们现在使用一个简单的连接器运行Kafka Connect,这些连接器将数据从文件导入Kafka主题并将数据从Kafka主题导出到文件。 

5、使用Kafka Streams 处理事件

一旦你的数据作为事件存储在Kafka中,你就可以使用Java/Scala的Kafka Streams客户端库来处理数据。它允许您实现关键任务实时应用程序和微服务,其中输入和/或输出数据存储在Kafka主题中。Kafka Streams将在客户端编写和部署标准Java和Scala应用程序的简单性与Kafka服务器端集群技术的优势相结合,使这些应用程序具有高度可扩展性、弹性、容错性和分布式。该库支持一次处理、有状态操作和聚合、窗口、连接、基于事件时间的处理等等。

五、总结图

从以上的知识中我们可以总结性的来画下Kafka的认知图

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

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

相关文章

鼠标市场洞察:数据分析揭示消费趋势!

鼠标整体数据分析 一. 概述 本报告基于从淘宝商品搜索接口和淘宝精确月销量接口中提取的数据,分析了前百个品牌在销售额上的占比情况。分析涵盖了销售额和占比的数据,为决策提供了依据。(以上两个接口有需求的可以找我要链接) 1. 大盘整体…

基于Python flask的豆瓣电影可视化系统,豆瓣电影爬虫系统

博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…

ppt压缩文件怎么压缩?压缩PPT文件的多种压缩方法

ppt压缩文件怎么压缩?当文件体积过大时,分享和传输就会变得困难。许多电子邮件服务对附件的大小有限制,而在网络环境不佳时,上传和下载大文件可能耗时较长。此外,在不同设备上播放时,较大的PPT文件还可能导…

基于FPGA的以太网设计(一)

以太网简介 以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如…

GA-BP回归预测 | MATLAB实现GA-BP多输入单输出回归预测

回归预测 | MATLAB实现GA-BP多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-BP多输入单输出回归预测预测效果基本介绍模型描述遗传算法神经网络GA-BP网络程序设计学习总结参考资料预测效果 基本介绍 MATLAB实现GA-BP多输入单输出回归预测,输入7个特征,输出1个,优化权重…

指针——数组(指针)传参

(一)前文问题答案解析 1、代码 int(*pa[10])[5] 的解析 某人:嗯,有*pa,这不很明显是个指针嘛,然后 [5] 说明是个数组指针,int类型,[10]。。。。 这这这,很明显不是指针。…

第38讲:Ceph分布式存储集群部署

文章目录 1.Ceph分布式存储集群安装方式2.Ceph集群环境规划3.基础环境配置3.1.设置主机名以及SSH免密登录3.2.配置Ceph yum源 4.部署Ceph分布式存储集群4.1.安装Ceph-deploy自动化部署工具4.2.初始化创建一个Ceph分布集群4.3.在每个节点中部署Ceph集群所有的组件4.4.部署并配置…

DevOps

DevOps中的Dev指的是Development(开发),Ops指的是Operations(运维),DevOps就是打通开发运维的壁垒,实现开发运维一体化。 一、项目开发考虑的维度 Dev:怎么开发。 Ops&#xff1a…

基于FPGA的以太网设计(二)

一.以太网硬件架构概述 前文讲述了以太网的一些相关知识,本文将详细讲解以太网的硬件架构 以太网的电路架构一般由MAC、PHY、变压器、RJ45和传输介质组成,示意图如下所示: PHY:Physical Layer,即物理层。物理层定义了…

IO进程--day1

一、定义学生结构体 学生信息:学号,姓名,成绩等编写2个函数 save_stu 和 load_stu save_stu通过 fprintf 将arr数组中的3个学生的所有信息,保存到文件中去 load_stu通过 fscanf 将文件中的3个学生的所有信息,读取到一个…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入,滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

linux设备驱动介绍

目录 一.裸机设备驱动 vs linux设备驱动 1.什么是驱动程序 2.裸机驱动和操作系统驱动有什么区别 3.linux驱动的本质是什么 二.linux设备分类 一.裸机设备驱动 vs linux设备驱动 1.什么是驱动程序 一般来说能让硬件工作起来的程序就是驱动程序,驱动程序提供的是硬件设备操作的…

随机掉落的项目足迹:修改组件库默认样式

需求引入 为了便于讲解,我直接引入案例 在使用element ui的表单组件时,我觉得输入框前面的“文章标题”几个字太小了,想改大一点 解决方法 F12 审查元素,找到“文章标题”对应的代码,发现这个标签对应的类名class&q…

学以致用 SAP HCM 顾问excel函数实战系列

EXCEL函数:在上学的时候,对word、excel、PPT感觉都很简单,稀里糊涂的学,稀里糊涂的忘,然后走向工作岗位的时候,突然发现这三大宝剑无比锋利,可惜自己太菜,曾经努力学习,但…

如何设置 GitLab 密码长度?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 60天专业…

【CSS in Depth 2 精译_047】7.2 CSS 响应式设计中的媒体查询原则(上):深入理解媒体查询的类型

当前内容所在位置(可进入专栏查看其他译好的章节内容) 【第七章 响应式设计】(概述) 7.1 移动端优先设计原则(上篇) 7.1.1 创建移动端菜单(下篇)7.1.2 给视口添加 meta 标签&#xf…

算法笔记day03

目录 1. 大数加法 2.链表相加(二) 3.大数乘法 1. 大数加法 大数加法_牛客题霸_牛客网 算法思路: 这就是一道模拟题,模拟加法列竖式运算的过程。 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改&#xff0…

用最短长度的绳子把整个花园围起来

给定一个数组 trees,其中 trees[i] [xi, yi] 表示树在花园中的位置。 你被要求用最短长度的绳子把整个花园围起来,因为绳子很贵。只有把 所有的树都围起来,花园才围得很好。 返回恰好位于围栏周边的树木的坐标。 示例 1: 输入: points […

【24最新亲试】ubuntu下载go最新版本

系列综述: 💞目的:本系列是个人整理为了工具配置的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于Ubuntu 升级 golang 版本完美步骤进行的,每个知识点的修…

C语言-了解程序环境和预处理看这一篇(超详解)

1.程序环境 在ANSIC的任何一种实现中,都会存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令,第2种是执行环境,它用于实际执行代码。如下图所示: 1.1 翻译环境 翻译环境会分几个步骤…