您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

什么让 Apache Kafka 如此快速?

时间:2023-09-12 14:43:50  来源:微信公众号  作者:小技术君

Kafka 支持高吞吐量、高度分布式、容错性强的平台,能够以低延迟传递消息。

有几种技术使 Apache Kafka 如此快速:

  • 低延迟消息传递
  • 批量数据和压缩
  • 水平扩展

低延迟消息传递

大多数传统的数据系统使用随机存取内存(RAM)进行数据存储,因为RAM提供了极低的延迟。让我们看看使用RAM的优缺点。

  • 优点: 这种方法使它们变得非常快速。
  • 缺点: RAM的成本远高于磁盘,特别是当系统中有数百GBPS的数据流时。

Kafka 避免了随机存取内存,它通过顺序I/O和零拷贝原理实现低延迟消息传递。

顺序I/O:

Kafka 在存储和缓存消息时大量依赖文件系统。有一种普遍的看法是“磁盘很慢”,这意味着高寻址时间。想象一下,如果我们可以避免寻址时间,我们可以实现与RAM一样低的延迟。Kafka 通过顺序I/O来实现这一点。

Kafka 的基本概念是日志(log);这是一种仅附加、完全有序的数据结构。

下面是一个演示日志流(队列)的图示,生产者以不可变和单调的方式在日志流的末尾追加,而订阅者/消费者可以维护自己的指针以指示当前消息的处理。

来源:https://kafka.apache.org/intro.html

每当生产者发布一条消息时,它都会收到包含记录偏移量的确认。第一条发布到分区的记录的偏移量为0,第二条为1,以此类推,以递增的顺序。消费者从由偏移量指定的位置消费数据,然后定期将其位置保存在日志中以进行提交。保存偏移量的目的是让另一个消费者在消费者实例崩溃时可以从其位置恢复。

零拷贝原理:

当我们从内存中提取数据并将其发送到网络时会发生什么。

  • 从内存中提取数据,它会将数据从内核上下文复制到应用程序上下文
  • 将这些数据发送到互联网,它会将数据从应用程序上下文复制到内核上下文。

图像概念来自:https://developer.ibm.com/articles/j-zerocopy/

正如您所看到的,将数据在内核上下文和应用程序上下文之间进行复制是多余的,这会消耗CPU周期和内存带宽,尤其是在数据量很大时会导致性能下降。这正是零拷贝原则要解决的问题。

图像概念来自:https://developer.ibm.com/articles/j-zerocopy/

批量数据和压缩

高效的压缩需要将多个消息一起压缩,而不是分别压缩每个消息。

Kafka 支持这一点,允许递归消息集。一批消息可以被聚合在一起压缩,并以这种形式发送到服务器。这批消息将以压缩形式写入,保持在日志中并只能由消费者解压缩。

假设带宽为10MB/s,一次性发送10MB数据比逐个发送10000条消息要快得多(假设每条消息占用100字节)。

压缩会提高消费者的吞吐量,但会增加一些解压缩成本。

Kafka 支持 GZIP 和 SnAppy 压缩协议。

水平扩展

首先让我们了解什么是垂直扩展。假设对于传统数据库服务器,当负载增加时,处理的一种方法是添加更多的资源,例如 CPU、RAM、SSD 等。这被称为垂直扩展。它有一些缺点,如下所示:

  • 每台硬件都有限制,无法无限制地向上扩展
  • 如果机器宕机怎么办?通常需要停机时间

水平扩展通过添加更多的机器来解决相同的问题。

Kafka 具有在数千台机器之间为单个主题拥有数千个分区的能力,这意味着 Kafka 可以处理大量负载。



Tags:Kafka   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
Kafka 支持高吞吐量、高度分布式、容错性强的平台,能够以低延迟传递消息。有几种技术使 Apache Kafka 如此快速: 低延迟消息传递 批量数据和压缩 水平扩展低延迟消息传递大多...【详细内容】
2023-09-12  Tags: Kafka  点击:(0)  评论:(0)  加入收藏
消息中间件在现代分布式系统中起着至关重要的作用。它们可以在不同的应用程序之间实现可靠的异步通信,提供高吞吐量、低延迟和可扩展性。下面将介绍如何在Linux系统中使用容...【详细内容】
2023-09-08  Tags: Kafka  点击:(7)  评论:(0)  加入收藏
作者 | Andreas Evers编译 | 言征长期以来,数据库一直充当着记录系统,它们以可靠且持久的方式存储和管理关键数据,也赢得了大多数公司的信赖。但时代在变。许多新兴趋势正在影...【详细内容】
2023-08-28  Tags: Kafka  点击:(32)  评论:(0)  加入收藏
Kafka 是一个基于发布-订阅模式的消息系统,它可以在多个生产者和消费者之间传递大量的数据。Kafka 的一个显著特点是它的高吞吐率,即每秒可以处理百万级别的消息。那么 Kafka...【详细内容】
2023-08-23  Tags: Kafka  点击:(14)  评论:(0)  加入收藏
那么 Kafka 到底会不会丢数据呢?如果丢数据,究竟该怎么解决呢?只有掌握了这些, 我们才能处理好 Kafka 生产级的一些故障,从而更稳定地服务业务。认真读完这篇文章,我相信你会对Kaf...【详细内容】
2023-08-17  Tags: Kafka  点击:(27)  评论:(0)  加入收藏
作者 | 蔡柱梁 审校 | 重楼目标 了解 Kafka 的重要概念 搭建 Kafka 服务端 使用SpringBoot 实现简单的 Demo1 了解 Kafka 的重要概念Kafka 是使用 Scala 语言开发的一个多分...【详细内容】
2023-07-07  Tags: Kafka  点击:(64)  评论:(0)  加入收藏
消息引擎的核心职责就是将生产者生产的消息传输到消费者,设计消息格式是各大消息引擎框架的关键问题,因为消息格式决定了消息引擎的性能和效率。本文带大家探究消息引擎kafka...【详细内容】
2023-06-28  Tags: Kafka  点击:(51)  评论:(0)  加入收藏
Kafka 和 RabbitMQ 都是流行的开源消息系统,它们可以在分布式系统中实现数据的可靠传输和处理。Kafka 和 RabbitMQ 有各自的优势和特点,它们适用于不同的场景和需求。本文将比...【详细内容】
2023-06-26  Tags: Kafka  点击:(70)  评论:(0)  加入收藏
生产环境下,为了尽可能提升Kafka的整体吞吐量,可以对Kafka的相关配置参数进行调整,以达到提升整体性能的目的。本文主要从Kafka的不同组件出发,讲解各组件涉及的配置参数和参数...【详细内容】
2023-05-26  Tags: Kafka  点击:(135)  评论:(0)  加入收藏
在定位一些实时数据的Case时,如果没有对实时数据进行历史归档,在排查问题时,没有日志追述,会很难定位是哪个环节的问题。因此,我们需要对处理的这些实时数据进行记录归档并存储。...【详细内容】
2023-05-25  Tags: Kafka  点击:(108)  评论:(0)  加入收藏
▌简易百科推荐
Kafka 支持高吞吐量、高度分布式、容错性强的平台,能够以低延迟传递消息。有几种技术使 Apache Kafka 如此快速: 低延迟消息传递 批量数据和压缩 水平扩展低延迟消息传递大多...【详细内容】
2023-09-12  小技术君  微信公众号  Tags:Kafka   点击:(0)  评论:(0)  加入收藏
在实际的开发过程中,Map容器是非常常见的一种数据结构,用于存储键值对形式的数据。在C++中,Map容器通常使用std::map或std::unordered_map等STL标准库中提供的容器来实现。除此...【详细内容】
2023-09-12  鲨鱼编程  微信公众号  Tags:容器   点击:(1)  评论:(0)  加入收藏
在Linux上部署多节点Docker集群是一种常见的方式,可以提供高可用性和扩展性。下面将介绍如何在Linux上部署多节点Docker集群,并涵盖以下内容:1、选择适当的操作系统和版本2、安...【详细内容】
2023-09-11  编程技术汇  今日头条  Tags:Docker   点击:(3)  评论:(0)  加入收藏
1.引言前端容器化是一种将前端应用程序打包成容器的技术,使其可以在不同的环境中快速、高效地部署和运行。2.背景前后端分离的趋势已形成现状,前端工程复杂度叠加增长,新、老...【详细内容】
2023-09-08  佳华云原生实践  微信公众号  Tags:容器   点击:(6)  评论:(0)  加入收藏
K8S搭建完毕之后,碰到个问题,如何进行远程debug(别在生产环境远程debug哦)?那就需要打通局域网和K8S内部网络了。本文主要介绍Pod通信、K8S网络插件、局域网和K8S网络如何打通。...【详细内容】
2023-09-08  不焦躁的程序员  微信公众号  Tags:Kubernetes   点击:(7)  评论:(0)  加入收藏
消息中间件在现代分布式系统中起着至关重要的作用。它们可以在不同的应用程序之间实现可靠的异步通信,提供高吞吐量、低延迟和可扩展性。下面将介绍如何在Linux系统中使用容...【详细内容】
2023-09-08  编程技术汇  今日头条  Tags:消息中间件   点击:(7)  评论:(0)  加入收藏
容器运行时容器运行时(Container Runtime)是一种负责在操作系统层面创建和管理容器的软件工具或组件。它是容器化技术的核心组件之一,用于在容器内部运行应用程序,并提供隔离、...【详细内容】
2023-09-07  云原生运维圈  微信公众号  Tags:Docker   点击:(5)  评论:(0)  加入收藏
本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。一、为什么需要多集群随着K8s和...【详细内容】
2023-09-07    vivo互联网技术  Tags:K8s   点击:(9)  评论:(0)  加入收藏
Kubernetes有哪些核心部件,架构图和流程图又是怎样的,kubectl和kubelet经常分不清,声明式API和命令式API又有什么区别,本文一一详说。1、Kubernetes集群概述1.1、概述Kubernetes...【详细内容】
2023-09-06  不焦躁的程序员  微信公众号  Tags:Kubernetes   点击:(17)  评论:(0)  加入收藏
Docker是一个开源的应用容器引擎,它让开发者能够将应用打包在一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上。通过使用Docker,开发者可以创建、部署和运行...【详细内容】
2023-09-06  微技术之家  微信公众号  Tags:docker   点击:(2)  评论:(0)  加入收藏
站内最新
站内热门
站内头条