Apache Kafka元素解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Apache Kafka 是什么?干什么用的?本文试图从基本元素等微观角度去剖析Apache Kafka的原理机制。作为一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域,由 LinkedIn 开发,基于Scala 编写,Apache Kafka以可水平扩展和高吞吐率而被广泛使应用于各行各业,是大型分布式系统不可缺少的中间件产品。

      Apache Kafka 是什么?干什么用的?本文试图从基本元素等微观角度去剖析Apache Kafka的原理机制。作为一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域,由 LinkedIn 开发,基于Scala 编写,Apache Kafka以可水平扩展和高吞吐率而被广泛使应用于各行各业,是大型分布式系统不可缺少的中间件产品。

       Apache Kafka的基本元素是什么?

      要了解Apache Kafka的工作方式,我们需要熟悉Kafka生态系统的基本要素。首先,我们先了解一下其基本架构,如下图所示:

       从上述体系中,我们可以看到,整个架构主要包含:Producer(消息生产者)、Consumer(消息消费者)、Broker(代理)、Zookeeper(分布式协调框架及注册中心)等基础组件,以及它们之间进行交互的Topic(订阅主题)等等,其整个工作流围绕上述组件进行运作。

      在实际的业务场景中,如何能够降低复杂性并简化服务之间的集成呢?要回答此问题,首先,我们应该先了解一下事件的概念。 什么是事件呢?

      在Apache Kafka生态中,事件,是一个具有键,值,时间戳和可选的元数据标题。密钥不仅用于标识,而且还用于具有相同密钥的事件的路由和聚合操作。

      由上图所知:事件生产者和消费者之间的交互由事件驱动。这种模式支持服务之间的松散耦合,对于我们来说更重要的是,事件产生者不需要知道事件使用者状态。这是模式的本质。从生产者的角度来看,我们不需要知道谁或如何使用主题数据。

      当然,像往常一样,一切都是相对的。并非事件驱动的样式始终是最好的。这取决于用例。例如,当操作应该同步完成时,自然会使用请求-响应样式。在诸如用户身份验证,报告AB测试或与第三方服务集成的情况下,最好使用异步样式。当需要松散耦合时,最好采用事件驱动的方法。在较大的系统中,我们正在混合样式以实现业务目标。

      在业务场景使用过程中,如果消息未附加密钥,则使用循环算法发送数据。当事件附加了键时,情况就不同了。然后,事件总是转到拥有此键的分区。从性能角度来看,这是有意义的。我们通常使用id来获取有关对象的信息,在这种情况下,从同一代理获取信息要比在许多代理中寻找信息更快。具体可参考如下:

      目前,Apache Kafka有以下几种不同类型的事件:

      1、非密钥事件:无需使用密钥的事件。它描述了系统中发生的单个事实。它可以用于度量目的。

      2、实体事件:最重要的事件。它描述了给定时间点上业务对象的状态。它必须具有唯一键,该键通常与业务对象的ID有关。它们在事件驱动的体系结构中扮演着主要角色。

      3、键事件:具有键但与任何业务实体都不相关的事件。该密钥用于聚合和分区。

回到Apache Kafka的基本架构图,

     基于文章首页的架构图,我们对核心元素进行一一分析:

     Topic:事件存储。类似于文件系统中的文件夹,该主题类似于组织内部内容的文件夹。可以将订单保留在电子商务系统中的所有订单事件的主题示例名称中。与其他消息传递系统不同,事件在阅读后仍保留在主题上。它使其功能非常强大且具有容错能力。当消费者将处理带有错误的东西并想再次对其进行处理时,这也解决了一个问题。主题始终可以有零个,一个或多个生产者和订阅者。

      Kafka 中消息是以 Topic 进行分类的,生产者生产消息,消费者消费消息,面向的都是同一个 Topic。

      Topic 是逻辑上的概念,而 Partition 是物理上的概念,每个 Partition 对应于一个 log 文件,该 log 文件中存储的就是 Producer 生产的数据。每一个Topic被划分为多个较小部分,称之为“分区” 。分区可以描述为提交日志。消息可以附加到日志中,并且可以按从头到尾的顺序为只读。分区旨在提供冗余和可伸缩性。最重要的事实是分区可以托管在不同的服务器(代理)上,这提供了一种非常强大的方法来水平扩展主题。

      Producer 生产的数据会不断追加到该 log 文件末端,且每条数据都有自己的 Offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 Offset,以便出错恢复时,从上次的位置继续消费。

     由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下,Kafka 采取了分片和索引机制。它将每个 Partition 分为多个 Segment,每个 Segment 对应两个文件:“.index” 索引文件和 “.log” 数据文件。这些文件位于同一文件下,该文件夹的命名规则为:topic 名-分区号。例如,first 这个 topic 有三分分区,则其对应的文件夹为 first-0,first-1,first-2。

      Producer:生产者。负责创建有关Kafka Topic的新事件的客户端应用程序。生产者负责选择主题分区。如前所述,默认情况下,当我们不提供任何密钥时,将使用轮询。还有一种创建自定义业务映射规则以将分区分配给消息的方法。

      Consumer:消费者。负责从Kafka中读取和处理事件的客户端应用程序。消费者按事件的产生顺序读取所有事件。每个消费者还可以订阅多个主题。分区上的每个消息都有一个由Apache Kafka生成的唯一整数标识符(偏移量),当新消息到达时该标识符会增加。消费者使用它来知道从哪里开始阅读新消息。综上所述,分区和偏移量用于在Apache Kafka系统中精确定位消息。管理补偿是每个消费者的主要责任。

     消费者的概念很容易。但是缩放呢?如果我们有许多消费者,但只想阅读一次该怎么办?这就是设计消费群概念的原因。这里的想法是,当使用者属于同一组时,它将分配一些分区子集来读取消息。这有助于避免重复读取的情况。在下图中,有一个示例说明如何从该主题扩展数据消耗。当使用者进行耗时的操作时,我们可以将其他使用者连接到该组,这有助于更快地处理该使用者级别上的所有新事件。但是,当分区数量太少时,我们必须小心。我们将无法扩大规模。这意味着如果我们有更多的使用者而不是分区,那么它们就是空闲的。

      Broker:代理。负责在磁盘上接收和存储产生的事件,使使用者可以按主题,分区和偏移量获取消息。经纪人通常位于许多地方,并聚集在一起。

     像其他分布式系统中一样,当我们使用代理时,我们需要进行一些协调。代理可以在不同的服务器上运行(也可以在单个服务器上运行许多代理)。它提供了额外的复杂性。每个代理都包含有关其拥有的分区的信息。为了安全起见,Apache Kafka引入了专用的分区复制,以防发生故障或维护。可以为每个主题分别设置有关一个主题需要多少个副本的信息。它提供了很大的灵活性。在下图中,显示了复制的基本配置。复制基于领导者跟踪方法。

      以上为Apache Kafka体系中的基本元素的简要解析,只有将基础的概念梳理清楚,才能在后续的架构实践中容易上手,以便能够解决项目中的问题。

相关文章
|
4月前
|
消息中间件 安全 Kafka
Apache Kafka安全加固指南:保护你的消息传递系统
【10月更文挑战第24天】在现代企业环境中,数据的安全性和隐私保护至关重要。Apache Kafka作为一款广泛使用的分布式流处理平台,其安全性直接影响着业务的稳定性和用户数据的安全。作为一名资深的Kafka使用者,我深知加强Kafka安全性的重要性。本文将从个人角度出发,分享我在实践中积累的经验,帮助读者了解如何有效地保护Kafka消息传递系统的安全性。
225 7
|
4月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
172 5
|
4月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
165 4
|
4月前
|
消息中间件 监控 大数据
优化Apache Kafka性能:最佳实践与调优策略
【10月更文挑战第24天】作为一名已经对Apache Kafka有所了解并有实际使用经验的开发者,我深知在大数据处理和实时数据流传输中,Kafka的重要性不言而喻。然而,在面对日益增长的数据量和业务需求时,如何保证系统的高性能和稳定性成为了摆在我们面前的一个挑战。本文将从我的个人视角出发,分享一些关于如何通过合理的配置和调优来提高Kafka性能的经验和建议。
141 4
|
1月前
|
数据采集 Web App开发 JavaScript
DOMParser解析TikTok页面中的图片元素
DOMParser解析TikTok页面中的图片元素
|
4月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
143 5
|
4月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
103 1
|
4月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
143 2
|
4月前
|
消息中间件 Ubuntu Java
Ubuntu系统上安装Apache Kafka
Ubuntu系统上安装Apache Kafka
|
4月前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
82 0

推荐镜像

更多