Kafka 简介

news2024/11/19 12:36:59

目录

1、概念介绍

Kafka 由来

ZooKeeper

Kafka 特性

Kafka 使用场景

Kafka 复制备份 

2、Kafka 架构

Broker

Topic

Producer

Partition

Consumers

Consumer Group

Distribution


1、概念介绍
Kafka 由来

Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 zookeeper 协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 hadoop 的批处理系统、低延迟的实时系统、storm/Spark 流式处理引擎,web/nginx 日志、访问日志,消息服务等等,生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。用 scala 语言编写,Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。

ZooKeeper

Kafka将元数据信息保存在Zookeeper中,消费者发送给Topic本身的数据是不会发到Zk上。

1、kafka使用zookeeper来实现动态的集群扩展,broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新,我们不需要更改客户端(producer和consumer)的配置。

2、而客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。这里的客户端指的是Kafka的消息生产端(Producer)和消息消费端(Consumer)。

3、Broker端使用zookeeper来注册broker信息,以及监测partition leader存活性

4、Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息。

5、Zookeeper和Producer没有建立关系,只和Brokers、Consumers建立关系以实现负载均衡,即同一个Consumer Group中的Consumers可以实现负载均衡

Kafka 特性

1、高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition,consumer group 对partition进行消费操作。

2、可扩展性:kafka集群支持热扩展

3、持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

4、容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

5、高并发:支持数千个客户端同时读写

Kafka 使用场景

1、日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

2、消息系统:解耦和生产者和消费者、缓存消息等。

3、用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

4、运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

5、流式处理:比如spark streaming和storm

Kafka 复制备份

kafka将每个partition数据复制到多个broker上,任何一个partition有一个leader和多个follower(可以没有);备份的个数可以通过broker配置文件来设定。

leader处理所有的read-write请求,follower需要和leader保持同步。Follower和consumer一样,消费消息并保存在本地日志中;leader负责跟踪所有的follower状态,如果follower"落后"太多或者失效,leader将会把它从replicas同步列表中删除。

当所有的follower都将一条消息保存成功,此消息才被认为是"committed",那么此时consumer才能消费它。即使只有一个replicas实例存活,仍然可以保证消息的正常发送和接收,只要zookeeper集群存活即可。(不同于其他分布式存储,比如hbase需要"多数派"存活才行)

当leader失效时,需在followers中选取出新的leader,可能此时follower落后于leader,因此需要选择一个"up-to-date"的follower。选择follower时需要兼顾一个问题,就是新leader server上已经承载的partition leader的个数,如果一个server上有过多的partition leader,意味着此server将承受着更多的IO压力。在选举新leader,需要考虑到"负载均衡"。

2、Kafka 架构

Broker

一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个topic;

Topic

Topic 即主题,通过对消息指定主题可以将消息分类,消费者可以只关注自己需要的 Topic 中的消息。

Producer

即生产者,向 Kafka 集群发送消息,在发送消息之前,会对消息进行分类,即 Topic, 同时 Producer 也能决定将此消息归属于哪个 partition。

Partition

Topic 在逻辑上可以被认为是一个 queue,每条消费都必须指定它的 Topic,一个Topic 可以认为是一类消息。为了使得 Kafka 的吞吐率可以线性提高,物理上把Topic 分成一个或多个 Partition,每个Partition 在物理上对应一个文件夹,该文件夹下存储这个 Partition 的所有消息和索引文件。

创建一个 topic 时,同时可以指定分区数目,分区数越多,其吞吐量也越大,但是需要的资源也越多,同时也会导致更高的不可用性,kafka 在接收到生产者发送的消息之后,会根据均衡策略将消息存储到不同的分区中。如果 partition 规则设置的合理,所有消息可以均匀分布到不同的 partition 里,这样就实现了水平扩展。

每个 Partition 中的消息都是有序的,任何发布到此 partition 的消息都会被直接追加到 append log 文件的尾部,其中每条消息在文件中的位置称为 offset(偏移量),offset为一个long型数字,它是唯一标记一条消息。每条消息都被append到partition中,是顺序写磁盘,因此效率非常高。其组织结构如下图所示:

kafka 和 JMS(Java Message Service)实现(activeMQ)不同的是:即使消息被消费,消息仍然不会被立即删除。日志文件将会根据 broker 中的配置要求,保留一定的时间之后删除;比如 log 文件保留 2 天,那么两天后,文件会被清除,无论其中的消息是否被消费.kafka 通过这种简单的手段,来释放磁盘空间,以及减少消息消费之后对文件内容改动的磁盘 IO 开支。

Consumers

Consumer 即消费者,消费者通过与 kafka 集群建立长连接的方式,不断地从集群中拉取消息,然后可以对这些消息进行处理。

Consumer Group

发布消息通常有两种模式:

  • 队列模式(queuing,即单播)
  • 发布-订阅模式(publish-subscribe,即广播)

kafka通过引入consumer组(consumer group)来同时支持这两种模型。

各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果consumer group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。

如果所有的consumer都具有不同的group,那这就是"发布-订阅",消息将会广播给所有的消费者。

如果所有的consumer都具有相同的group,那这就是队列模式,消息将会在consumers之间负载均衡。

通过分区的概念,Kafka可以在多个consumer组并发的情况下提供较好的有序性和负载均衡。将每个分区只分发给一个consumer组,这样一个分区就只被这个组的一个consumer消费,就可以顺序的消费这个分区的消息。因为有多个分区,依然可以在多个consumer之间进行负载均衡。注意同一个Consumer Group 中consumer的数量不能多于分区的数量,否则将意味着某些consumer将无法得到消息。

对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,由consumer来控制;当consumer正常消费消息时,offset将会"线性"的向前驱动,即消息将依次顺序被消费,事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任意值

Distribution

每个分区在Kafka集群的若干服务中都有副本,这样这些持有副本的服务可以共同处理数据和请求,副本数量是可以配置的。副本使Kafka具备了容错能力,以提高可用性。

每个分区都由一个服务器作为“leader”,零或若干服务器作为“followers”,leader负责处理消息的读和写,followers则去复制leader。如果leader down了,followers中的一台则会自动成为leader。集群中的每个服务器都会同时扮演两个角色:作为它所持有的一部分分区的leader,同时作为其他分区的followers,这样集群就会具有较好的负载均衡。

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

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

相关文章

kubesphere DevOps部署SpringCloud项目

🍎devops部署SpringCloud项目 🍅环境说明🍅部署流程🧁创建DevOps工程🧁填写流水线信息🧁创建流水线 🍅部署应用所需脚本🧁jenkinsfile🧁Dockerfile🧁deploy.y…

pyqtgraph绘图类

pyqtgraph绘图类 pyqtgraph绘图有四种方法: 方法描述pyqtgraph.plot()创建一个新的QWindow用来绘制数据PlotWidget.plot()在已存在的QWidget上绘制数据PlotItem.plot()在已存在的QWidget上绘制数据GraphicsLayout.addPlot()在网格布局中添加一个绘图 上面四个方法都接收同样…

Kurator v0.5.0发布,打造统一的多集群备份与存储体验

Kurator 是由华为云推出的开源分布式云原生套件。面向分布式云原生场景,Kurator 旨在为用户提供一站式的解决方案,帮助用户快速构建自己的分布式云原生平台。 在最新发布的 v0.5.0 版本中,Kurator 强化了其在多集群环境中的应用备份与恢复&am…

localStorage、sessionStorage、vuex区别和使用感悟

一、介绍及区别 localStorage的生命周期是永久;不手动在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。 sessionStorage的生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭,那么所有通过sessionStorage存…

解析APP自动化测试工具主要用途

在移动应用开发领域,APP自动化测试工具成为保障软件质量和提升开发效率的不可或缺的利器。本文将探讨APP自动化测试工具的主要用途,以及如何通过这些工具实现高效的测试流程。 一、提高测试效率 自动化执行测试用例:APP自动化测试工具可以自动…

原生js监听当前元素之外的点击事件

监听当前元素之外的点击事件 一、具体场景二、具体实现三、完整代码 一、具体场景 当我们需要实现点击其他位置关闭弹窗的时候,就需要监听当前元素之外的点击事件。 二、具体实现 实现思路:监听整个dom的点击事件,判断当前元素是否包含点击…

统计学R语言实验2 :概率与分布

实验2 概率与分布 一、实验目的 1. 掌握理解离散型概率分布的相关概念。 2. 掌握理解连续型概率分布的相关概念。 3. 熟悉R语言等语言的集成开发环境。 二、实验分析与内容 完成教材P52-53的第2题和第8题  2.一条食品生产线每8小时一班中出现…

性能压力测试:企业成功的关键要素

性能压力测试在现代企业软件开发中扮演着至关重要的角色,它不仅仅是一项技术手段,更是保障企业成功的关键要素。本文将探讨性能压力测试在企业中的重要性,并阐述其对业务稳定性、用户体验和品牌声誉的影响。 一、保障业务稳定性 1、应对高负载…

LinuxC/C++编译指令

以C为例,C语言只需将指令中的g改成gcc即可 创建并编写一个源文件 一般情况下,对源文件直接一步编译即可 g 源文件名 -o 生成文件名 或者 g -o 生成文件名 源文件名 下面是对代码进行分步编译的指令 对源文件预处理,生成.i文件 对.i文件进行编译&#…

【分布式技术】分布式存储ceph部署

目录 一、存储的介绍 单机存储设备 单机存储的问题 商业存储 分布式存储 二、分布式存储 什么是分布式存储 分布式存储的类型 三、ceph简介 四、ceph的优点 五、ceph的架构 六、ceph的核心组件 七、OSD存储后端 八、Ceph 数据的存储过程 九、Ceph 版本发行生命周…

Hadoop——HDFS、MapReduce、Yarn期末复习版(搭配尚硅谷视频速通)

一、HDFS 1.HDFS概述 1.1 HDFS定义 HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自…

[分布监控平台] Zabbis 监控

zabbix 是什么? zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbix …

计算机网络——应用层(3)

计算机网络——应用层(3) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 点对点(P2P)P2P网络一般用途优点缺点总结 套接字编程基本步骤UDP套接字TCP套接字基本步骤 二者对比 小程一言 我的计算机网络专栏,是自…

软考2023年上半年,选择题讲解4-27

中断向量提供的是(4) A.中断源的设备地址 B.中断服务程序的入口地址 C.传递数据的超始地址. D.主程序的断点地址. 中断向量通常包含中断服务程序的入口地址,而不是中断源的设备地址。 所以选B -------------------------------------------------------------…

字节发布Coze GPTs,可免费体验GPT-4与DALL3绘画模型

open AI发布ChatGPT以来,很多基于ChatGPT好玩的应用也随之而来。而OpenAI也发布了自己的GPT store。他允许任何人基于ChatGPT开发自己的应用并上传到GPT store里面。而字节基于发布的coze,可以让没有API的小伙伴免费使用GPT-4以及DELL-3等模型。 首先需要我们登陆到coze的官网…

java数据结构与算法刷题-----LeetCode96. 不同的二叉搜索树

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只…

day02_环境_基础

今日内容 零、复习昨日 一、工欲善其事必先利其器 二、GPT 三、Java是个啥 四、安装JDK 五、HelloWorld程序[重点] 六、编码规范 七、IDEA 八、Typora工具 附录: 单词 零、 复习昨日 复习 作业 一、工欲善其事必先利其器 看视频 PotPlayer 轻便,无级变速 内网通 局域网,聊天办公…

java应用中swagger使用

文章目录 前言使用依赖引入配置注解使用controller中注解实体类注解 页面展示 前言 现在前后端分离式开发,最头疼的部分就是接口文档了。最讨厌两种人,一种是不写接口文档的人,另一种则是让我写接口文档的人。实际上,我们有一款特…

【IC设计】ICer‘s 乾坤大挪移——FSM状态机

目录 理论解读状态机定义状态转移图Mealy和Moore型状态机推荐写“新两段式状态机” 设计实战可乐机两种state的FSM(异步复位)4种状态的one-hot状态机4种状态的同步复位状态机蓄水池问题 参考链接 理论解读 状态机定义 状态机简写为 FSM(Fin…

基于域账户及西门子simatic logon的集中权限管理的实现(二)

上次我们完成了域环境及simatic logon服务器的搭建,今天我们将在wincc及HMI上进行组态,实现用域账户进行登录。 3.WINCC用户管理组态引文:博途工控人平时在哪里技术交流博途工控人社群 3.1 首先将要安装WINCC的服务器加入域。 3.2 在wincc…