Apache Kafka教程--Kafka新手入门
-
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等。
什么是Kafka?
当涉及到使用基于消息的主题实现生产者和消费者之间的通信时,我们使用Apache Kafka。Apache Kafka是一个快速、可扩展、容错、发布-订阅的消息传递系统。基本上,它为高端的新一代分布式应用设计了一个平台。同时,它允许大量的永久性或临时性的消费者。Kafka的一个最好的特点是,它具有高度的可用性和对节点故障的弹性,并支持自动恢复。这个特点使得Apache Kafka成为现实世界数据系统中大规模数据系统组件之间的理想通信和集成工具。
在继续学习Kafka教程之前,让我们先了解一下Kafka中Messaging System这一术语的实际含义。
Kafka中的消息传递系统
-
发布-订阅消息系统
点对点消息传递系统
Apache Kafka的历史
此前,LinkedIn面临着的问题是,将网站上的大量数据低延迟地输入到一个能够处理实时事件的lambda架构中。作为一个解决方案,Apache Kafka在2010年被开发出来,因为之前没有一个解决方案可以处理这个问题。
为什么我们要使用Apache Kafka集群?
我们都知道,大数据中存在着巨大的数据量。而且,当涉及到大数据时,有两个主要挑战。一个是收集大量的数据,而另一个是分析收集到的数据。因此,为了克服这些挑战,我们需要一个消息传递系统。那么Apache Kafka已经证明了它的效用。Apache Kafka有许多好处,例如:
- 通过存储/发送实时进程的事件来跟踪网络活动。
- 提醒和报告业务指标。
- 将数据转换为标准格式。
- 连续处理流媒体数据。
Kafka教程 - 先决条件
在继续学习Apache Kafka教程之前,你必须对Java和Linux环境有良好的了解。
Kafka架构
-
为了订阅一个或多个主题并处理应用程序中产生的消息,我们使用这个Kafka Consumer API。
-
为了充当流处理器,从一个或多个主题消费输入流,并向一个或多个输出主题产生输出流,同时有效地将输入流转化为输出流,这个Kafka Streams API给应用程序提供了便利。
-
这个Kafka连接器API允许构建和运行可重用的生产者或消费者,将Kafka主题连接到现有的应用程序或数据系统。例如,一个连接到关系型数据库的连接器可能会捕获一个表的每一个变化。
这个Kafka Producer API允许一个应用程序将消息发布到一个或多个Kafka主题。
Kafka组件
-
它将消息发布到一个Kafka主题。
-
这个组件订阅一个(多个)主题,读取和处理来自该主题的消息。
-
Kafka Broker管理主题中的消息存储。如果Kafka有一个以上的Broker,这就是我们所说的Kafka集群。
-
为了给Broker提供关于系统中运行的进程的元数据,并促进健康检查和Broker领导权的选举,Kafka使用Kafka zookeeper。
Kafka主题
Kafka教程--日志剖析
Kafka教程 - 数据日志
消费者会向一个叫作 __consumer_offset
的主题发送
消息,消息里包含每个分区的偏移量。如果消费者一直处于运行状态,那么偏移量就没有
什么实际作用。但是,如果消费者发生崩溃或有新的消费者加入群组,则会触发再均衡。
再均衡完成之后,每个消费者可能会被分配新的分区,而不是之前读取的那个。为了能够
继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的
位置继续读取消息。
Kafka教程 - Kafka的分区
Java在Apache Kafka中的重要性
此外,如果我们需要Kafka上标准的高处理率,我们可以使用Java语言。同时,Java为Kafka消费者客户端提供了良好的社区支持。因此,用Java实现Kafka是一个正确的选择。
Kafka使用案例
-
运营监测
-
事件源
消息代理
Kafka教程 - Kafka的比较
许多应用程序提供了与Kafka相同的功能,如ActiveMQ、RabbitMQ、Apache Flume、Storm和Spark。那你为什么要选择Apache Kafka而不是其他呢?
Apache Kafka 和 Apache Flume 对比
-
复制功能
工具的类型
RabbitMQ 和 Apache Kafka 对比
最重要的Apache Kafka替代品之一是RabbitMQ。因此,让我们看看它们之间有什么不同。
-
Apache Kafka--它的性能率很高,达到100,000条消息/秒的程度。RabbitMQ - 而RabbitMQ的性能率约为20,000消息/秒。
-
Apache Kafka - 它允许可靠的日志分布式处理。此外,Kafka流中还内置了流处理语义。RabbitMQ - 在这里,消费者只是基于FIFO,从HEAD中读取并逐一处理。
Apache Kafka - 基本上,Kafka是分布式的。同时,在保证耐久性和可用性的情况下,数据被共享和复制。RabbitMQ - 它对这些功能的支持相对较少。
传统消息队列系统与Apache Kafka的对比
-
传统的队列系统--它不允许基于类似消息或事件的逻辑处理。Apache Kafka - 它允许根据类似的消息或事件来处理逻辑。
传统的队列系统--大多数队列系统在消息被处理后通常会从队列的末端删除。Apache Kafka - 在这里,消息即使在被处理后也会持续存在。它们不会在消费者收到它们时被删除。
参考资料:
- Apache Kafka Tutorial — Kafka For Beginners