我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎样解析Kafka架构

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎样解析Kafka架构

本篇文章给大家分享的是有关怎样解析Kafka架构,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Kafka是一个开源的、分布式的、可分区的、可复制的基于日志提交的发布订阅消息系统。它具备以下特点:

1. 消息持久化: 为了从大数据中获取有价值的信息,任何信息的丢失都是负担不起的。Kafka使用了O(1)的磁盘结构设计,这样做即便是在要存储大体积的数据时也是可以提供稳定的性能。使用Kafka时,message会被存储并且会被复制以防止数据丢失。

2. 高吞吐量: 设计是工作在普通的硬件设施上多个客户端能够每秒处理几百兆的数据量。

3. 分布式: Kafka Broker的中心化集群支持消息分区,而consumer采用分布式进行消费。

4. 多种Client支持: Kafka很容易与其它平台进行支持,例如:Java、.NET、PHP、Ruby、Python。

5. 实时: 消息由producer产生后立即对consumer可见。这个特性对于基于事件的系统是很关键的。

下面就来对Kafka架构做一个简单的说明:

  • Kafka各组件说明

    • Topic 与 Broker

    • partition log

    • partition distribution

    • Broker

    • Topic

    • Producer

    • Consumer

  • Kafka 提供的保障

  • 架构图

Kafka各组件说明

Broker

每个kafka server称为一个Broker,多个borker组成kafka cluster。

怎样解析Kafka架构

一个机器上可以部署一个或者多个Broker,这多个Broker连接到相同的ZooKeeper就组成了Kafka集群。

Topic

Kafka是一个发布订阅消息系统,它的逻辑结构如下:

怎样解析Kafka架构

Topic 就是消息类别名,一个topic中通常放置一类消息。每个topic都有一个或者多个订阅者,也就是消息的消费者consumer。

Producer将消息推送到topic,由订阅该topic的consumer从topic中拉取消息。

Topic 与broker

一个Broker上可以创建一个或者多个Topic。同一个topic可以在同一集群下的多个Broker中分布。

怎样解析Kafka架构 

Partition log

Kafka会为每个topic维护了多个分区(partition),每个分区会映射到一个逻辑的日志(log)文件:

怎样解析Kafka架构

每当一个message被发布到一个topic上的一个partition,broker应会将该message追加到这个逻辑log文件的最后一个segment上。这些segments 会被flush到磁盘上。Flush时可以按照时间来进行,也可以按照message 数来执行。

每个partition都是一个有序的、不可变的结构化的提交日志记录的序列。在每个partition中每一条日志记录都会被分配一个序号——通常称为offset,offset在partition内是唯一的。论点逻辑文件会被化分为多个文件segment(每个segment的大小一样的)。

Broker集群将会保留所有已发布的message records,不管这些消息是否已被消费。保留时间依赖于一个可配的保留周期。例如:如果设置了保留策略是2day,那么每一条消息发布两天内是被保留的,在这个2day的保留时间内,消息是可以被消费的。过期后不再保留。 

怎样解析Kafka架构

Partition distribution

日志分区是分布式的存在于一个kafka集群的多个broker上。每个partition会被复制多份存在于不同的broker上。这样做是为了容灾。具体会复制几份,会复制到哪些broker上,都是可以配置的。经过相关的复制策略后,每个topic在每个broker上会驻留一到多个partition。如图: 

怎样解析Kafka架构

对于同一个partition,它所在任何一个broker,都有能扮演两种角色:leader、follower。

看上面的例子。红色的代表是一个leader。

对于topic1的4个partition:

Part 1的leader是broker1,followers是broker2。

Part2的leader是broker2,followers是broker1。

Part3的leader是broker3,followers是broker1。

Part4的leader是broker4,followers是broker2。

对于topic2的3个partition:

Part1的leader是broker1,followers是broker2。

Part2的leader是broker2,followers是broker3。

Part3的leader是broker3,followers是broker4。

对于topic2的4个partition:

Part 1的leader是broker4,followers是broker1。

Part2的leader是broker2,followers是broker1。

Part3的leader是broker3,followers是broker1。

Part4的leader是broker1,followers是broker2。

下面是一个真实的例子:

怎样解析Kafka架构

图中的partition 0 的leader是broker 2,它有3个replicas:2,1,3。 

In-Sync Replica:在同步中,也就是有哪些broker正处理同步中。partition 0的ISR是2,1,3,说明了3个replica都是正常状态。如果有一个broker down,那么它就不会在ISR中出现。

之后把broker1停止后:

怎样解析Kafka架构

每个partition的Leader的用于处理到该partition的读写请求的。

每个partition的followers是用于异步的从它的leader中复制数据的。

Kafka会动态维护一个与Leader保持一致的同步副本(in-sync replicas (ISR))集合,并且会将最新的同步副本(ISR )集合持久化到zookeeper。如果leader出现问题了,就会从该partition的followers中选举一个作为新的leader。

所以呢,在一个kafka集群中,每个broker通常会扮演两个角色:在一个partition中扮演leader,在其它的partition中扮演followers。Leader是最繁忙的,要处理读写请求。这样将leader均分到不同的broker上,目的自然是要确保负载均衡

Producer

Producer作为消息的生产者,在生产完消息后需要将消息投送到指定的目的地(某个topic的某个partition)。Producer可以根据指定选择partition的算法或者是随机方式来选择发布消息到哪个partition。

Consumer

在Kafka中,同样有consumer group的概念,它是逻辑上将一些consumer分组。因为每个kafka consumer是一个进程。所以一个consumer group中的consumers将可能是由分布在不同机器上的不同的进程组成的。Topic中的每一条消息可以被多个consumer group消费,然而每个consumer group内只能有一个consumer来消费该消息。所以,如果想要一条消息被多个consumer消费,那么这些consumer就必须是在不同的consumer group中。所以也可以理解为consumer group才是topic在逻辑上的订阅者。

每个consumer可以订阅多个topic。

每个consumer会保留它读取到某个partition的offset。而consumer 是通过zookeeper来保留offset的。

Kafka提供的保障

如果producer往特定的partition发送消息时,会按照先后顺序存储,也就是说如果发送顺序是message1、message2、message3。那么这三个消息在partition log中的记录的offset就是 message1_offset < message2_offset < message3_offset。

consumer也是有序的浏览log中的记录。

如果一个topic指定了replication factor为N,那么就允许有N-1个Broker出错。

架构图

对上述各组件介绍后,现在就应该可以很容易的理解Kafka的架构图:

 怎样解析Kafka架构

以上就是怎样解析Kafka架构,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎样解析Kafka架构

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎样解析Kafka架构

本篇文章给大家分享的是有关怎样解析Kafka架构,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Kafka是一个开源的、分布式的、可分区的、可复制的基于日志提交的发布订阅消息系统
2023-06-19

Kafka的体系架构是怎样的

这期内容当中小编将会给大家带来有关Kafka的体系架构是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、什么是Kafka?数据工程中最具挑战性的部分之一是如何从不同点收集和传输大量数据到分布式系统
2023-06-02

Hadoop架构解析

Hadoop是一个开源的分布式存储和处理大数据的框架,它的架构主要包括以下几个核心组件:Hadoop Distributed File System(HDFS):HDFS是Hadoop的分布式文件系统,它将大文件分成多个块并存储在多台机器上
Hadoop架构解析
2024-02-29

怎样分析JEESZ分布式架构平台

这期内容当中小编将会给大家带来有关怎样分析JEESZ分布式架构平台,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 项目核心代码结构截图
2023-06-03

Android架构是怎样的

本篇内容介绍了“Android架构是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Android 图解Android 操作系统是一个软
2023-06-27

SDN架构是怎样的

这篇文章主要介绍了SDN架构是怎样的的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SDN架构是怎样的文章都会有所收获,下面我们一起来看看吧。SDN是一种将网络控制功能与转发功能分离、实现控制可编程的新兴网络架构
2023-06-27

Teradata的架构是怎样的

Teradata的架构是一个多层次的结构,包括以下几个主要组件:Parsing Engine (PE):负责接收和解析SQL查询请求,进行查询优化和执行计划生成。PE还负责管理用户会话和权限控制。BYNET:是Teradata的通信层,用
Teradata的架构是怎样的
2024-03-11

Kafka的生产者优秀架构设计的示例分析

本篇文章给大家分享的是有关Kafka的生产者优秀架构设计的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Kafka 是一个高吞吐量的分布式的发布订阅消息系统,在全世界都
2023-06-05

kubernetes架构是怎么样的

小编给大家分享一下kubernetes架构是怎么样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:整体架构二:架构模块说明以上是“kubernetes架构是怎
2023-06-04

怎样深度解析Lustre体系结构

这期内容当中小编将会给大家带来有关怎样深度解析Lustre体系结构,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  Lustre架构是一种集群存储体系结构,其核心组件就是Lustre文件系统。该文件系统可
2023-06-04

Docker整体架构是怎样的

这篇文章主要讲解了“Docker整体架构是怎样的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker整体架构是怎样的”吧!1.用户是使用DockerClient与Docker Daem
2023-06-04

MySQL架构体系是怎样的

本篇内容主要讲解“MySQL架构体系是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL架构体系是怎样的”吧!一 : 数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混
2023-06-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录