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的认知图
相关文章:

Kafka-初识
一、Kafka是什么? Kafka是一个高度可扩展、弹性、容错和安全的分布式流处理平台,由服务器和客户端组成,通过高性能TCP网络协议进行通信。它可以像消息队列一样生产和消费数据。可以部署在裸机硬件、虚拟机和容器上,也可以部署在本…...
Redis的主要的特性和优势 ?
Redis 的主要特性 内存存储:Redis 将数据存储在内存中,这使得读写操作非常快速。它还支持将数据持久化到磁盘,以防止数据丢失。 丰富的数据结构:Redis 不仅支持简单的字符串键值对,还支持更复杂的数据结构,…...

yolov5-7.0模型DNN加载函数及参数详解(重要)
yolov5-7.0模型DNN加载函数及参数详解(重要) 引言yolov5(v7.0)1,yolov5.h(加载对应模型里面的相关参数要更改)2,main主程序(1)加载网络(2)检测推理࿰…...
StringEntity 用于将字符串内容作为 HTTP 请求实体(请求体)
StringEntity 类是 Apache HttpClient 库中的一个类,它用于将字符串内容作为 HTTP 请求实体(请求体)。这个类非常适合用于发送 JSON、XML 或其他需要以字符串形式发送的数据。以下是 StringEntity 类的一些常用方法和代码案例: …...

校园系统校园小程序 论坛校园圈系统失物招领、闲置二手、跑腿外卖等校园圈子系统应该具备有哪些功能
针对校园系统、校园小程序、论坛校园圈系统以及失物招领、闲置二手、跑腿外卖等具体功能,一个综合性的校园圈子系统应该具备以下主要功能: 前后端源码查看 一、基础功能 用户注册与登录 提供用户注册和登录功能,支持学生身份验证、手机号验…...

[AWS云]kafka调用和创建
背景:因为因为公司的项目需要使用AWS的kafka,但是在创建和使用过程中都遇到了一些报错和麻烦,毕竟老外的东西,和阿里云、华为使用起来还是不一样。 一、创建(创建的配置过程就略了,就是配置一下可用区、型号࿰…...

查看 Excel 应用程序中已打开的 Excel 文件的完整路径
要查看 Excel 应用程序中已打开的 Excel 文件的完整路径(全路径),你可以通过以下几种方法获取具体路径,尤其是在 VSTO 应用程序中。 方法1:使用 VSTO Excel 外接程序代码 在 VSTO 外接程序代码中,您可以直接…...
学习 RocketMQ 单机部署、消息发送、消息接收
文章目录 RocketMQ 介绍为什么要使用 MQ ?RocketMQ 与其他产品对比vs Kafkavs RabbitMQvs ActiveMQ RocketMQ 重要概念部署 Namesrver、Broker、Dashboard快速入门消息生产者消息消费者 消费模式简单消息1)同步发送2)异步发送3)单…...
【计算机网络】CDN
CDN(Content Delivery Network,内容分发网络)是一种分布式的服务器网络,旨在通过将内容缓存到多个地理位置的服务器上,加速内容的分发和传递。CDN 的主要目的是减少用户访问网站时的延迟,提升用户体验&…...
数据结构:插入排序
1.插入排序 此排序如打扑克牌一样;每次抓牌,把扑克从前向后扒拉;找到合适的位置插入进去—所以叫插入排序; 时间复杂度:O(N^2) int arr[10] { 9,8,7,6,5,4,3,2,1,0 };//数据太多就不好写了 …...

Nginx反向代理配置与负载均衡配置
简介:整理自黑马程序员苍穹外卖的第11节 nginx是什么? nginx的好处 nginx反向代理配置方式 nginx负载均衡的配置方式 nginx负责均衡策略...
axios 前端与 Django 后端的 POST 交互
背景 自己在写一些油猴脚本,前端需要用 JS,后端是自己的服务,是用 Python 的 Django 框架完成的。 油猴脚本中需要通过 POST 方法,向后端传一些数据,所以前端我用的是 axios 库,后端需要用 Django 处理 P…...
数据结构常用术语
一. 常见术语 数据相关 英文术语中文术语Data数据Data element数据元素Data item数据项Data structure数据结构Logical structure逻辑结构Data type数据类型 指针与存储 英文术语中文术语Pointer指针Sequential storage structure顺序存储结构Linked storage structure链状…...
Flask 轻松上手:从零开始搭建属于你的Web应用
引言 随着互联网技术的发展,Web应用程序的需求日益增长。对于开发者来说,选择一个合适的框架至关重要。Flask以其简洁的设计、高度的可定制性和对各种扩展的良好支持,成为了很多项目的基础。无论你是初学者还是有经验的开发者,掌…...

[MyBatis-Plus]快速入门
介绍 MyBatis-Plus是MyBatis的好朋友, 与MyBatis配合, 实现开发效率的提高 官网: 特点: 润物细无声: 只做增强不做改变, 引入它不会对现有工程产生影响, 如丝般顺滑效率自上: 只需简单配置, 即可快速进行单表CRUD, 从而节省大量时间功能丰富: 代码生产, 自动分页, 逻辑删除, …...

单例模式和读者写者问题
文章目录 10. 线程安全的单例模式10.1 什么是设计模式10.2 什么是单例模式10.3 单例模式的特点10.4 饿汉方式和懒汉方式10.5 单例模式的线程池 11. STL和智能指针的线程安全 问题11.1 STL中的容器是否是线程安全的?11.2 智能指针是否是线程安全的? 12. 其他常见的各种锁13. 读…...

内网wordpress更换IP后无法访问的解决办法
一、现象 一台装有wordpress的台式机,从一个校区移到了另一个校区,更换了IP地址,导致无法正常访问。 二、分析 安装wordpress的时候里面的ip(或域名)都已固定。安装好后,内网通过IP访问&am…...

Spring Boot课程答疑:技术难题一网打尽
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

云卷云舒【超级数据库】:算力网络时代的云原生数据库
一直关注算力网络,再次分析下移动云的数据库团队,他们在做的一些事情其实比较务实,在推进数据库依托云原生演进到算力网络阶段,这都是在构建一个能够承载无限容量、无感接入、多模融合、智能调度的超级数据库。 未来数据库&#…...

电脑分盘分盘
方案一:使用磁盘管理工具扩展卷功能将未分配磁盘合并到C盘 按WinR输入diskmgmt.msc并按Enter键打开磁盘管理工具。在主界面中右键单击C盘驱动器并选择“扩展卷”,然后按照提示流程操作即可扩展C盘空间。 WinR diskmgmt.msc 注意:虽然系统内置…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...