Apache Kafka教程–Kafka新手入门

Kafka Assistant 是一款 Kafka GUI 管理工具——管理Broker,Topic,Group、查看消费详情、监控服务器状态、支持多种消息格式。

文章目录

  • Apache Kafka教程--Kafka新手入门
    • 摘要
    • 什么是Kafka?
      • Kafka中的消息传递系统
      • Apache Kafka的历史
      • 为什么我们要使用Apache Kafka集群?
      • Kafka教程 - 先决条件
      • Kafka架构
      • Kafka组件
    • Kafka教程--日志剖析
    • Kafka教程 - 数据日志
      • Kafka教程 - Kafka的分区
      • Java在Apache Kafka中的重要性
      • Kafka使用案例
      • Kafka教程 - Kafka的比较
        • Apache Kafka 和 Apache Flume 对比
        • RabbitMQ 和 Apache Kafka 对比
        • 传统消息队列系统与Apache Kafka的对比

摘要

今天,我们开始了我们的新旅程,这就是Apache Kafka教程。在这个Kafka教程中,我们将看到什么是Kafka,Apache Kafka的历史,为什么是Kafka。此外,我们还将学习Kafka架构、Kafka的组件和Kafka分区。此外,我们还将讨论Kafka的各种比较和Kafka的使用案例。除此之外,我们将在这个Kafka教程中看到各种术语,如Kafka Broker、Kafka Cluster、Kafka Consumer、Kafka Topics等。

那么,让我们开始学习Apache Kafka教程吧。

什么是Kafka?

当涉及到使用基于消息的主题实现生产者和消费者之间的通信时,我们使用Apache Kafka。Apache Kafka是一个快速、可扩展、容错、发布-订阅的消息传递系统。基本上,它为高端的新一代分布式应用设计了一个平台。同时,它允许大量的永久性或临时性的消费者。Kafka的一个最好的特点是,它具有高度的可用性和对节点故障的弹性,并支持自动恢复。这个特点使得Apache Kafka成为现实世界数据系统中大规模数据系统组件之间的理想通信和集成工具。

此外,这项技术取代了传统的消息 Broker,能够像JMS、AMQP等一样给出更高的吞吐量、可靠性和复制。此外,Kafka提供了一个Kafka Broker、一个Kafka Producer和一个Kafka Consumer。Kafka Broker是Kafka集群上的一个节点,它的作用是坚持和复制数据。Kafka生产者将消息推送到称为Kafka Topic的消息容器中。而Kafka消费者则从Kafka Topic中提取消息。

在继续学习Kafka教程之前,让我们先了解一下Kafka中Messaging System这一术语的实际含义。

Kafka中的消息传递系统

当我们将数据从一个应用程序转移到另一个应用程序时,我们使用了消息传递系统。它的结果是,不用担心如何分享数据,应用程序可以只关注数据。分布式消息传递是建立在可靠的消息队列上。虽然,消息在客户端应用程序和消息传递系统之间是异步排队的。有两种类型的消息传递模式,即点对点和发布-订阅(pub-sub)消息传递系统。然而,大多数的消息传递模式都遵循pub-sub。

  • 点对点消息传递系统

    在这里,消息被保存在一个队列中。虽然,一个特定的消息最多只能被一个消费者消费,即使一个或多个消费者可以订阅队列中的消息。同时,它确保一旦消费者阅读了队列中的消息,它就会从该队列中消失。

  • 发布-订阅消息系统

    在这里,消息被持久化在一个主题中。在这个系统中,Kafka消费者可以订阅一个或多个主题并消费该主题中的所有消息。此外,消息生产者是指发布者,消息消费者是指订阅者。

Apache Kafka的历史

此前,LinkedIn面临着的问题是,将网站上的大量数据低延迟地输入到一个能够处理实时事件的lambda架构中。作为一个解决方案,Apache Kafka在2010年被开发出来,因为之前没有一个解决方案可以处理这个问题。

然而,有一些技术可用于批处理,但这些技术的部署细节是与下游用户共享的。因此,当涉及到实时处理时,这些技术并不适合。然后,在2011年,Kafka被开源了。

为什么我们要使用Apache Kafka集群?

我们都知道,大数据中存在着巨大的数据量。而且,当涉及到大数据时,有两个主要挑战。一个是收集大量的数据,而另一个是分析收集到的数据。因此,为了克服这些挑战,我们需要一个消息传递系统。那么Apache Kafka已经证明了它的效用。Apache Kafka有许多好处,例如:

  • 通过存储/发送实时进程的事件来跟踪网络活动。
  • 提醒和报告业务指标。
  • 将数据转换为标准格式。
  • 连续处理流媒体数据。

因此,由于其广泛的使用,这项技术正在给一些最流行的应用程序,如ActiveMQ、RabbitMQ、AWS等带来激烈的竞争。

Kafka教程 - 先决条件

在继续学习Apache Kafka教程之前,你必须对Java和Linux环境有良好的了解。

Kafka架构

下面我们将在这个Apache Kafka教程中讨论四个核心API。

  • Kafka Producer API

    这个Kafka Producer API允许一个应用程序将消息发布到一个或多个Kafka主题。

  • Kafka Consumer API

    为了订阅一个或多个主题并处理应用程序中产生的消息,我们使用这个Kafka Consumer API。

  • Kafka Streams API

    为了充当流处理器,从一个或多个主题消费输入流,并向一个或多个输出主题产生输出流,同时有效地将输入流转化为输出流,这个Kafka Streams API给应用程序提供了便利。

  • Kafka Connector API

    这个Kafka连接器API允许构建和运行可重用的生产者或消费者,将Kafka主题连接到现有的应用程序或数据系统。例如,一个连接到关系型数据库的连接器可能会捕获一个表的每一个变化。

Kafka组件

利用以下组件,Kafka实现了信息传递。

  • Kafka主题

    基本上,消息的集合就是Topic。此外,我们还可以对Topic进行复制和划分。这里,复制指的是拷贝,划分指的是分区。另外,把它们想象成日志,Kafka在其中存储消息。然而,这种复制和划分主题的能力是实现Kafka的容错性和可扩展性的因素之一。

  • Kafka生产者

    它将消息发布到一个Kafka主题。

  • Kafka消费者

    这个组件订阅一个(多个)主题,读取和处理来自该主题的消息。

  • Kafka Broker

    Kafka Broker管理主题中的消息存储。如果Kafka有一个以上的Broker,这就是我们所说的Kafka集群。

  • Kafka Zookeeper

    为了给Broker提供关于系统中运行的进程的元数据,并促进健康检查和Broker领导权的选举,Kafka使用Kafka zookeeper。

Kafka教程–日志剖析

在这个Kafka教程中,我们将日志视为分区。基本上,一个数据源会向日志写消息。其中一个好处是,在任何时候,一个或多个消费者从他们选择的日志中读取。在这里,下图显示了数据源正在写日志,而消费者在不同的偏移点上正在读取日志。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NAB236NI-1678750136302)(https://object.redisant.com/images/Apache%20Kafka%20Tutorial%20%E2%80%94%20Log%20Anatomy.webp)]

Kafka教程 - 数据日志

通过Kafka,消息被保留了相当长的时间。而且,消费者可以根据自己的方便来阅读。然而,如果Kafka被配置为保留消息24小时,而消费者的停机时间超过24小时,消费者就会丢失消息。而且,如果消费者的停机时间只有60分钟,那么可以从最后的已知偏移量读取消息。Kafka并不保留消费者从一个主题中读取的状态。

消费者会向一个叫作 __consumer_offset 的主题发送
消息,消息里包含每个分区的偏移量。如果消费者一直处于运行状态,那么偏移量就没有
什么实际作用。但是,如果消费者发生崩溃或有新的消费者加入群组,则会触发再均衡。
再均衡完成之后,每个消费者可能会被分配新的分区,而不是之前读取的那个。为了能够
继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的
位置继续读取消息。

Kafka教程 - Kafka的分区

每个Kafka Broker中都有几个分区。此外,每个分区可以是一个领导者,也可以是一个主题的副本。此外,随着新数据对副本的更新,领导者负责对一个主题的所有写和读。如果领导者以某种方式失败了,副本就会作为新的领导者接管。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-toIXDtuP-1678750136302)(https://object.redisant.com/images/Apache%20Kafka%20Tutorial%20%E2%80%94%20Partition%20In%20Kafka.webp)]

Java在Apache Kafka中的重要性

Apache Kafka是用纯Java编写的,Kafka的本地API也是java。然而,许多其他语言如C++、Python、.Net、Go等也支持Kafka。不过,一个不需要使用第三方库的平台还是Java。另外,我们可以说,用Java以外的语言写代码,会有一点开销。

此外,如果我们需要Kafka上标准的高处理率,我们可以使用Java语言。同时,Java为Kafka消费者客户端提供了良好的社区支持。因此,用Java实现Kafka是一个正确的选择。

Kafka使用案例

有几个Kafka的使用案例,显示了我们为什么实际使用Apache Kafka。

  • 消息代理

    对于一个比较传统的消息代理,Kafka可以很好的作为一个替代品。我们可以说Kafka有更好的吞吐量,内置的分区、复制和容错功能,这使得它成为大规模消息处理应用的良好解决方案。

  • 运营监测

    对于运营监测数据,Kafka找到了很好的应用。它包括聚合来自分布式应用的统计数据,以产生集中式的运营数据反馈。

  • 事件源

    由于它支持非常大的存储日志数据,这意味着Kafka是一个优秀的事件源应用的后端。

Kafka教程 - Kafka的比较

许多应用程序提供了与Kafka相同的功能,如ActiveMQ、RabbitMQ、Apache Flume、Storm和Spark。那你为什么要选择Apache Kafka而不是其他呢?

让我们来看看下面的比较。

Apache Kafka 和 Apache Flume 对比

  • 工具的类型

    Apache Kafka- 对于多个生产者和消费者来说,它是一个通用的工具。Apache Flum- 而对于特定的应用来说,它是一个特殊用途的工具。

  • 复制功能

    Apache Kafka-使用摄入管道,它复制事件。 Apache Flum-它不复制事件。

RabbitMQ 和 Apache Kafka 对比

最重要的Apache Kafka替代品之一是RabbitMQ。因此,让我们看看它们之间有什么不同。

  • 特点

    Apache Kafka - 基本上,Kafka是分布式的。同时,在保证耐久性和可用性的情况下,数据被共享和复制。RabbitMQ - 它对这些功能的支持相对较少。

  • 性能

    Apache Kafka–它的性能率很高,达到100,000条消息/秒的程度。RabbitMQ - 而RabbitMQ的性能率约为20,000消息/秒。

  • 处理

    Apache Kafka - 它允许可靠的日志分布式处理。此外,Kafka流中还内置了流处理语义。RabbitMQ - 在这里,消费者只是基于FIFO,从HEAD中读取并逐一处理。

传统消息队列系统与Apache Kafka的对比

  • 信息保留

    传统的队列系统–大多数队列系统在消息被处理后通常会从队列的末端删除。Apache Kafka - 在这里,消息即使在被处理后也会持续存在。它们不会在消费者收到它们时被删除。

  • 基于逻辑的处理

    传统的队列系统–它不允许基于类似消息或事件的逻辑处理。Apache Kafka - 它允许根据类似的消息或事件来处理逻辑。

所以,这就是关于Apache Kafka教程的全部内容。希望你喜欢我们的解释。


参考资料:

  • Apache Kafka Tutorial — Kafka For Beginners

Apache Kafka教程--Kafka新手入门相关推荐

  1. 《Blender图解教程:新手入门练习》

    <Blender图解教程:新手入门练习> 1: 打开Blender 新建一个工程文件 2: 将模式转换为编辑模式左上角 3: 利用缩放工具对立方体进行缩放 缩放成扁平长方体,作为台灯底座 ...

  2. 建站教程WordPress新手入门十友链管理

    在SEO里面,一直强调的内链为王,外链为皇,友情链接就是皇,用于展示与其他网站交换的链接,可以相互导流.重不重要?自己判断!反正营销值得学一般不轻易跟人换友链,要换的也是知根知底的. 上一篇营销值得学 ...

  3. Blender图解教程:新手入门练习

    Blender图解教程:新手入门练习 所有的操作在编辑模式下进行 台灯 1.成品展示 步骤如下: 选择正方体的上表面,按住G键+Z键,滑动鼠标使正方体压扁: 仍然选择上表面,单击右键选择内插面,移动鼠 ...

  4. Apache Pig教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Apache Pig 是apache平台下的一个免费开源项目,Pig为大型数据集的处理提供了更高层次的抽象,很多时候数据的处理需要多个MapReduce过程才能实现,使得数据处理过程与该模式 ...

  5. Axure教程 axure新手入门基础(1)

    axure新手入门基础(1) 名词解释: 线框图:一般就是指产品原型,比如:把线框图尽快画出来和把原型尽快做出来是一个意思. axure元件:也叫axure组件或axure部件,系统自带了一部分最基础 ...

  6. GD32F103RCT6 MINI板综合开发教程(新手入门必备选择)

    前一段时间,抽了点空闲时间做了两块学习板,帮助新手入门,很多人希望能做一款比较全面应用的开发板,能够尽快学习国产芯片,现在,它来了... 接口说明: 设计图片: 尺寸图: 实际设计: 资料包: 程序注 ...

  7. 后羿采集器怎么导出数据_数据采集教程_新手入门_常见问题清单_后羿采集器

    1.如果您是新手,请务必先看一下官网视频讲解教程. 视频教程是由我们官方培训讲师给大家讲解后羿采集器的使用方法,每一篇教程其实都很简短,如果大家在开始采集之前先看一下这些视频讲解教程,大部分问题都能得 ...

  8. Scrapy爬取图片网站——最详细的入门爬虫教程,新手入门干货,不进来看一下?

    开始前准备 这次爬虫使用scrapy,所以用到的工具必然是python3.7,scrapy,pycharm这些东西, 目标网站:http://pic.netbian.com 彼岸图网,个人非常喜欢的图 ...

  9. flash教程,as3教程,as3新手入门等资源导航贴

    一. flash开发工具: Flash CS5下载 FlashCS5破解激活序列号,AdobeCS5破解激活序列号 Flash CS4破解版下载 [高速下载]Adobe 下载集( 不断更新中....) ...

最新文章

  1. CV圈太卷了!继谷歌提出MLP-Mixer之后,清华、牛津等学者又发表三篇MLP相关论文...
  2. linux 列出目录结构6,Linux系统目录结构及文件管理命令
  3. Java commit()_Java XAResource.commit方法代码示例
  4. Solr--企业级搜索应用服务器
  5. [Python] 程序结构与控制流
  6. 关于Tomcat 的一些配置和启动
  7. matlab 可视化(specifier)
  8. GitLab Docker 前端开发工具链
  9. 微信小程序中使用setData修改变量数组或对象中的参数方法
  10. JDK 8.0 新特性——函数式接口和Lambda 表达式
  11. IntelliJ IDEA创建Java-Web项目
  12. 地球上最厉害的字体:Helvetica
  13. swfobject介绍
  14. 基于Python实现的网上购书功能的网站后端
  15. 计算机办公软件基础知识题库,办公软件基础知识试题试卷--题库.doc
  16. Unity遍历文件夹及其文件
  17. echarts中环形图加边框
  18. 【asp.net】VS 2008中文版下载
  19. 超级账本基金会执行董事Daniela Barbosa:开源区块链已成主流
  20. 单字节和双字节的转换

热门文章

  1. json java 转义_java解析json,带转义字符的json
  2. 机器学习 房产价格预测
  3. vue解除双向绑定问题
  4. verilog 双向口使用
  5. 【Go】(1)go语言开发环境配置
  6. html铺满整个页面_html表格铺满页面
  7. 第二次作业(WordCount)重制版
  8. SearchEngin_Censys
  9. 【教程】在PPT中插入高亮代码段,超简单直接复制粘贴
  10. 【网络通信】websocket如何断线重连