kafka3.1 简介 (一)

2023-05-16

kafka3.1 简介 (一)

  • 主要概念和术语
    • 事件流(Event streaming)
    • 服务器(server)与客户端(client)
      • servers
      • client
    • 事件(event)
    • 生产者(Producers )与消费者(consumers )
    • 主题(topic)
    • 分区(partition)
    • 位移(offset)
    • 数据副本(replica)
    • leader 和 follower
    • ISR
  • Kafka Api

主要概念和术语

事件流(Event streaming)

从技术上讲,事件流(Event streaming)是指以连续不断的一系列事件(event) 的形式从事件源(event sources,如数据库、传感器、移动设备、云服务和软件应用程序)实时捕获数据的实践;持久地存储这些事件流,以便以后检索;实时和可追溯地操作、处理和响应事件流;并根据需要将事件流路由到不同的目标的技术。

因此,事件流确保了数据的连续流动和各种检索与处理,从而使正确的信息在正确的时间出现在正确的地方。

服务器(server)与客户端(client)

Kafka是一个分布式系统,由服务器和客户端组成,通过高性能的TCP网络协议进行通信。

servers

Kafka是作为一个集群运行的一个或多个服务器,可以跨越多个数据中心或云区域。其中一些服务器形成存储层(storage layer),称为代理(brokers)

其他服务器运行Kafka Connect,以事件流的形式持续导入和导出数据,将Kafka与你现有的系统集成,如关系数据库以及其他Kafka集群。

client

它们允许您编写分布式应用程序和微服务,这些应用程序和微服务可以并行地、大规模地、以容错的方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也是如此。

Kafka自带了一些这样的客户端,由Kafka社区提供的很多语言的客户端:Java、Scala、Go、Python、C/ c++和许多其他编程语言,并且支持REST api,还有更高级的Kafka Streams库。

事件(event)

事件记录了在你的业务中“发生了某事”的事实。在文档中也称为记录消息。当你读或写数据到Kafka时,你以事件的形式来完成。

从概念上讲,事件具有键、值、时间戳和可选元数据头。下面是一个事件的例子:

key: "Alice"
value: "Made a payment of $200 to Bob"
timestamp: "Jun. 25, 2020 at 2:06 p.m."

生产者(Producers )与消费者(consumers )

生产者是那些发布(写)事件到Kafka的客户端应用程序,消费者是那些订阅(读取和处理)事件的客户端。在Kafka中,生产者和消费者是完全解耦的,彼此是不可知的,这是实现Kafka众所周知的高可扩展性的一个关键设计元素。例如,生产者不需要等待消费者。Kafka提供了各种保证,比如只处理一次事件的能力。

主题(topic)

事件被组织起来并持久地存储在主题中。非常简单,主题类似于文件系统中的文件夹,而事件是该文件夹中的文件。例如,主题名称可以是“payments”。Kafka中的主题总是多生产者和多消费者:一个主题可以有0个、1个或多个生产者向它写入事件,也可以有0个、1个或多个消费者订阅这些事件。

主题中的事件可以根据需要随时读取,与传统消息传递系统不同,事件在使用后不会被删除。相反,你可以通过每个主题的配置来定义Kafka应该保留你的事件多长时间,在这之后旧的事件将被丢弃。Kafka的性能实际上与数据大小无关,所以长时间存储数据是完全没问题的。

分区(partition)

主题是分区的,这意味着一个主题分散在位于不同Kafka broker上的许多“buckets”上。

数据的分布式放置对于可伸缩性非常重要,因为它允许客户机应用程序同时从多个代理读取和写入数据。当一个新事件被发布到一个主题时,它实际上被追加(append)到该主题(topic)的一个分区(partitions)。带有相同事件键(event key)的事件(例如,客户ID或车辆ID)被写入到相同的分区,Kafka保证任何一个给定的topic分区的消费者将总是以完全相同的顺序读取该分区的事件。

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

位移(offset)

topic下的每个partition里的每条消息都会被分配一个唯一的序列号,称为位移值(offset),该位置值是从0开始顺序递增的整数。位移值可以唯一定位到某partition下的一条消息。**<topic,partition,offset>**三元组就可以唯一定位一条消息了。

数据副本(replica)

让你的数据具有容错性和高可用性,每一个主题(topic)可以被复制(replicated),甚至跨geo-regions或数据中心,这样总有多个brokers有一份数据以防出错,你想做代理维护,等等。一个常见的生产设置是复制因子(replication factor )3,也就是说,您的数据总是有三个副本。

此副本(replica)在主题分区(partition)级别执行。

副本分为俩类:领导者副本(leader replica)和追随者副本(follower replica)。追随者副本是不能提供服务给客户端的,也就是说不负责响应客户端发来的消息写入和消息消费请求。它只能被动的向领导者副本获取数据,而一旦leader replica 所在的broker宕机,Kafka会从剩余的replica中选举出新的 leader 继续提供服务。

leader 和 follower

Kafka 的 replica 分为两个角色:领导者( leader)和追随者( follower )。在这类 leader-follower 系统中通常只有 leader 对外提供服务, follower 只是被动地追随 leader 的状态,保持与 leader 的同步。follower 存在的唯一价值就是充当 leader的候补:一旦 leader 挂掉立即就会有一个追随者被选举成为新的 leader 接替它的工作。

ISR

ISR 的全称是in-sync replica,翻译过来就是与leader replica保持同步的 replica 集合 。

Kafka 为 partition 动态维护一个 replica 集合。该集合 中的所有 replica 保存的消息日志都与leader replica 保持同步状态。只有这个集合中的 replica 才能被选举为 leader,也只有该集合中所有 replica 都接收到了同一条消息,Kafka 才会将该消息置于“己提交”状态,即认为这条消息发送成功。

正常情况下, partition的所有 replica (含 leader replica )都应该与 leader replica 保持同步,即所有 replica 都在 ISR 中。因为各种各样的原因,一小部分 replica 开始落后于 leader replica 的进度 。当滞后到一定程度时,Kafka 会将这些 replica “踢”出 ISR 。相反地,当这些 replica 重新“追上”了 leader 的进度时 , 那么 Kafka 会将它们加回到ISR 中。

Kafka Api

除了用于管理和管理任务的命令行工具,Kafka有五个针对Java和Scala的核心api:

  • Admin API,用于管理和检查主题、代理和其他Kafka对象。
  • Producer API,发布(写入)事件流到一个或多个Kafka主题。
  • Consumer API,用于订阅(读取)一个或多个主题,并处理它们产生的事件流。
  • Kafka Streams API,实现流处理应用程序和微服务。它提供了处理事件流的高级函数,包括转换、聚合和连接之类的有状态操作、窗口、基于事件时间的处理等等。从一个或多个主题中读取输入,以便生成一个或多个主题的输出,从而有效地将输入流转换为输出流。
  • Kafka Connect API 用于构建和运行可重用的数据导入/导出连接器,这些连接器消费(读)或产生(写)来自外部系统和应用的事件流,这样它们就可以与Kafka集成。例如,到关系数据库(如PostgreSQL)的连接器可能捕获对一组表的每一个更改。然而,在实践中,你通常不需要实现自己的连接器,因为Kafka社区已经提供了数百个连接器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kafka3.1 简介 (一) 的相关文章

  • apex编译错误解决方案

    这里写自定义目录标题 apex编译错误解决方案 csrc mlp cpp 123 3 note in expansion of macro AT DISPATCH FLOATING TYPES AND HALF AT DISPATCH FL
  • Javaweb项目实践MVC入门到精通

    Javaweb项目实践MVC入门到精通 目标配置环境实体模型 user Dao的实现实体模型 ModelViewController xff1a 转发任务 xff0c 路由器的功能安全sql注入常见问题 目标 这个目标是写一个MVC模型 通
  • C++ 铪铪铪铪 烫烫烫 屯屯屯

    VS中 xff0c Debug模式下 xff0c 对于未初始化的内存 xff1a 1 xff09 若为栈内存 xff0c 默认为一连串 烫烫烫 xff0c 0xcc 2 xff09 若为堆内存 xff0c 默认为一连串 屯屯屯 xff0c
  • git常用操作命令

    目录 git删除push到远程服务器的commit用户名和邮箱撤销add操作commit message写错了删除已经上传的文件添加文件追踪 git删除push到远程服务器的commit span class token comment 会
  • 魔方矩阵

    看到魔方矩阵 xff0c 好奇 xff0c 好玩儿 xff0c 正好赶上周五 xff0c 就来放松一下 xff0c 总结一下几种魔方矩阵的规律 xff0c 并写一下C 43 43 实现过程 定义 xff1a 平面魔方的一般定义 xff1a
  • 样条插值曲线类型及其优缺点说明

    Spline Types This page gives a breakdown of each spline type how to use each one and the advantages disadvantages of eac
  • caffe layer层详解

    1 基本的layer定义 xff0c 参数 1 基本的layer定义 xff0c 参数 如何利用caffe定义一个网络 xff0c 首先要了解caffe中的基本接口 xff0c 下面分别对五类layer进行介绍 Vision Layers
  • caffe编译中的python问题

    问题 usr include boost python detail wrap python hpp 50 23 fatal error pyconfig h No such file or directory 解决方案 make clea
  • latex图像注释位置

    latex图像注释的位置在左边 不知道谁把模板里的 usepackage caption 给注释掉了
  • pytorch pretrained model

    pytorch pretrained model two methods method 1 比较大小 self span class token punctuation span model span class token operato
  • nodejs之minimist中间件使用

    minimist是nodejs的命令行参数解析工具 xff0c 因其简单好用 xff0c 轻量等特性 xff0c 所以用户使用较多 特性 xff1a short options long options Boolean 和 Number类型
  • RNA-seq 保姆教程:差异表达分析(一)

    介绍 RNA seq 目前是测量细胞反应的最突出的方法之一 RNA seq 不仅能够分析样本之间基因表达的差异 xff0c 还可以发现新的亚型并分析 SNP 变异 本教程 1 将涵盖处理和分析差异基因表达数据的基本工作流程 xff0c 旨在
  • 腾讯、阿里云服务器安装java全流程(yum安装java超简单详细版)

    有些服务器中自带了java xff0c 但不是你想要的版本的话 xff0c 可以先卸载掉 xff0c 然后更换想要的ava版本 因为是有网环境 xff0c 可以使用yum安装 无网环境可以参考我写的另一篇文章 xff1a linux无网环境
  • 某个牛人做WINDOWS系统文件详解

    某个牛人做WINDOWS系统文件详解 超牛 很详细介绍WINDOWS系统文件用途 想各位保存一份以后说定会有用 A ACCESS CHM Windows帮助文件 ACCSTAT EXE 辅助状态指示器 ADVAPI32 DLL 高级Win3
  • Nginx 流量统计分析

    目录 程序简介输出结果环境程序要求例子代码 程序简介 通过分析nginx日志 xff0c 统计出nginx流量 xff08 统计nginx日志中 body bytes sent 字段 xff09 xff0c 能自定义时间间隔 xff0c 默
  • 融资租赁业务系统(财务中台)

    融资租赁业务系统 财务中台 产品白皮书 版本号 xff1a V1 1 李雷 微信号 xff1a yanan122914 平台概述 融资租赁财务中台产品是一套专门针对融资租赁行业设计的融资租赁财务统一解决方案 对租赁公司传统的大单回租 直租
  • Session详解,学习 Session对象一篇文章就够了

    目录 1 Session概述 2 Session原理 3 Session使用 3 1 获取Session 3 2 Session保存数据 3 3 Session获取数据 3 4 Session移除数据 4 Session与Request应用
  • spring框架--全面详解(学习笔记)

    目录 1 Spring是什么 2 Spring 框架特点 3 Spring体系结构 4 Spring开发环境搭建 5 spring中IOC和DI 6 Spring中bean的生命周期 7 Spring Bean作用域 8 spring注解开

随机推荐

  • Caused by: java.lang.NoClassDefFoundError: io/seata/spring/annotation/datasource/SeataDataSourceBean

    在使用Spring Boot整合Seata实现分布式事务的时候报了这个错 当时在pom xml引入的spring cloud alibaba dependencies依赖包是2 2 2 RELEASE lt dependency gt lt
  • setup maven plugin connection

    setup maven plugin connection discover and map eclipse plugins to maven plugin goal executions 今天在创建maven工程时遇到了一个问题 工程在创
  • qt生成的exe到指定路径加载DLL文件

    qt编译生成的exe程序在打包依赖文件后 xff0c 如果同时又有其他dll文件时 xff0c 目录会看起来非常杂乱 我们可以通过将依赖文件放到某个路径下 xff0c 让exe程序在指定路径下加载 xff0c 此时需要用到qt 的qt co
  • PowerShell格式化显示(Format-Table Format-List)

    格式化 Format Format Wide Format List 常用 xff0c 显示的更加详细 Format Table 常用 AutoSize xff08 让表格更加紧凑 xff09 Format Custom 例子 xff1a
  • 使用VBA调用jar传递参数,并获取返回值

    目录 VBA代码 Java代码 运行效果 Excel Log效果 xff08 通过VBA调用jar后 xff0c 运行 xff0c 生成的Log xff09 课题 课题原因 xff08 直接原因 xff09 log4j的配置 课题验证 课题
  • 生产者与消费者模型&信号量

    6 生产者与消费者模型 6 1 123规则 1个线程安全的队列 只要保证先进先出的特性的数据结构都可以称之为队列 该队列需要保证互斥 xff0c 即同一时刻只能有一个线程对该安全队列进行操作还需要保证同步 xff0c 即生产者往安全队列生产
  • Ubuntu下面包依赖损坏的解决unmet dependencies

    2017 1 4 更新 在原来的文章中提到过使用gzip压缩changelog得到changelog debian gz 然后覆盖掉原来的 从而达到欺骗系统认为的软件包的版本问题 但是这样的话需要自己手动定位找到并且压缩 像pulseaud
  • 闭包调用时:AttributeError: ‘function‘ object has no attribute ‘xx‘

    目录 问题可能的出处 xff1a 解释 问题可能的出处 xff1a 1 闭包调用闭包内的某个属性报错 2 调用函数内部的属性 出处1就是根本原因还是2引起的 解释 需要理解下当类被装饰器修饰后 xff0c 类已经变成了闭包内返回的一个函数
  • MergeSort 归并排序(C语言)---人工智能导论

    MergeSort 归并排序 人工智能导论 1 MergeSort原理 mergeSort的准备是sort xff0c 关键是 merge 如何归并排序 xff1f 它是分两步走的 首先要把所给的数组分割开来 xff0c 然后对分割开来的子
  • Settings学习总结(一)

    个人对settings一些学习总结 xff0c 在介绍Settings一级菜单栏之前先讲解一下如何添加一级菜单栏 xff0c 这样可以更好的理解后面的一级菜单栏显示流程 添加一级菜单栏 在Settings java中添加代码 span cl
  • SpringBoot整合mybatis实现增删改查

    文章目录 一 前言二 配置pom文件引入依赖三 实现增删改查1 目录结构2 application yml 配置3 entity4 mapper5 service6 controller 四 mysql建库建库语句五 调试接口1 创建 ht
  • 双系统启动界面自定义美化设置

    装了Windows和Ubuntu双系统的小伙伴会发现Ubuntu系统附带安装的GNU GRUB多操作系统启动管理界面非常简单 xff0c 不太符合现在主流的UI界面设计理念 xff0c 那如何才能让启动界面变得更美观让人看着更舒服一些呢 x
  • CNN网络实现手写数字(MNIST)识别 代码分析

    CNN网络实现手写数字 xff08 MNIST xff09 识别 代码分析 自学用 Github代码源文件 本文是学习了使用Pytorch框架的CNN网络实现手写数字 xff08 MNIST xff09 识别 导入需要的包 span cla
  • U盘安装Windows10系统报错无法打开文件install.wim原因及解决办法

    1 现象描述 xff1a 毕业后买了一台联想Y7000P笔记本电脑用了一年左右 xff0c 换了工作后一直用的公司Mac笔记本 xff0c 就这样联想笔记本闲置几年再次使用时系统更新一下 xff0c 卡的要死就想重新安装一下系统 xff0c
  • Spring JPA native query 分页错误记录

    相信大家对SpringData JPA 自定义分页查询已经很熟悉了 xff0c 今天博主遇见了一个奇怪的问题 xff0c 记录下来 xff0c 跟大家分享 根据已经学习到的知识 xff0c 对于 64 Query nativeQuery 6
  • python 重复输出字符串

    阿里云大学人工智能学前小测验 Python测试 7 a 61 1 b 61 a 2 输出b的值为 A 1 B 2 C 11 D null 我选的答案是D xff0c 结果 答案是C xff0c 因为python可以通过str 2重复输出字符
  • socket中文乱码问题

    问题描述 xff1a 后端向前端发送中文 xff0c 前端显示正常 前端向后端发送中文 xff0c 后端显示乱码 解决 xff1a 前端js引入 最新版的 socket io js xff0c 不能使用socket io min js sp
  • python 将字符串小数 转换为 整型

    问题描述 xff1a 直接使用int函数将字符串类型的小数转换为 int型会报错 问题解决 xff1a 先转换为float型 xff0c 再转换为 int 型
  • MySQL binlog设置和查看命令

    目录 开启binlog重置命令查看binlog 开启binlog span class token comment 编辑模式进入 etc my cnf span span class token function vim span etc
  • kafka3.1 简介 (一)

    kafka3 1 简介 xff08 一 xff09 主要概念和术语事件流 xff08 Event streaming xff09 服务器 xff08 server xff09 与客户端 client serversclient 事件 xff