Kafka 简介
Apche Kafka 是一个基于分布式流处理的软件平台。它是一个发布订阅的消息系统,使得应用,服务器,处理器可以交换数据。Kafka 最初有 Linkedin 开发,随后捐赠给 Apache 软件基金会。Apache Kafka 解决了发送方和接收方之间数据通信的问题。
Kafka 架构
1、主题
它是表示相似类型数据的通用名字或标题。在 Apache Kafka 中,一个集群中可以有多个主题。每个主题指定不同类型的消息。
20220916-2507e7f9-c8c5-4346-9453-7f5e370a4988.png
2、分区
数据或消息被划分为更小的部分,称为分区。每个分区中数据都有一个偏移量(offset)。数据以顺序方式写入。我们可以有无限多的分区,有无限多的偏移量。然而,我们不能保证信息将被写入哪个分区。
3、副本
Apache Kafka 是大数据领域的分布式软件系统。因此数据有很多份拷贝。在 Kafka 中,每一个 Broker 包含一系列数据,但是如果 Broker 或机器宕机了呢?数据就会丢失。为了防范于未然,Apache Kafka 启用了复制的特性,以避免数据的丢失,即使在 Broker 故障的情况下。要做到这一点,需要为 Broker 中的主题设置副本因子(replication factor)。
4、生产者
它们是使用生产者的 API 向集群内的主题写入 / 发布数据的应用程序。生产者可以在主题或主题内指定分区上写入数据。
5、消费者
它们是使用消费 API 从集群内的主题中 读取 / 消费数据的应用程序。消费者可以读取主题的或主题内指定分区的数据。
6、Broker
Broker 是维护和管理已发布的消息软件进程。Broker 管理消费者的偏移量,并负责 将消息传递给正确的消费者。
7、Zookeeper
zookeeper 用于监控 Kafka 集群并协调每个 Broker 。它以键值对的形式保存所有与 Kafka 集群相关的元数据信息。
Kafka 如何工作?
Kafka 是一个分布式系统,由服务器和客户端组成。通过高性能的 TCP 网络协议进行通信,并部署在任何虚拟机和云环境中。
1、服务器
Kafka 以一个或多个服务器集群的形式运行,可以跨越多个数据中心或云区域。其中一些服务器形成了存储层,称为 Broker 。其他的服务器运行 Kafka Connect,不断地导入和导出数据到流事件。
2、客户端
它们允许编写分布式应用和微服务,这些应用和微服务可以并行地,大规模地读取,写入和处理事件流,即使在网络问题或机器故障 的情况下也能以容错的方式进行。
Kafka 特性
20220916-e3c767a3-33cb-481f-97d0-6acd4d1f3ade.png1、伸缩性
Apache Kafka 可以扩展数据生产者,数据Broker 和数据消费者。无论你是由几个数据生产者创建很大的数据集,然后发送给许多消费者组,还是以其他方式,Kafka 都能满足你的需求。
2、扩展性
Kafka 在过去的几年非常流行,也促进了大量应用程序开发与 Kafka 的集成。这使得新功能的添加变得很容易,比如说以插件集成到应用程序中。
3、容错
Kafka Streams 建立在 Kafka 内部原生集成的容错能力上。Kafka 分区是高度可用和复制的,所以当流数据被持久化到 Kafka 时,即使应用程序失败并需要重新处理,它也是可用的。Kafka Stream 中的任务利用了 Kafka 消费者客户端提供的容错能力来处理故障,如果一个任务运行在一台有故障的机器上,Kafka Stsreams 会自动在应用程序的一个剩余运行实例中重新启动该任务。
4、减少了对多种整合的需求
生产者生产的所有数据都要经过 Kafka 。因此,我们只需要创建一个 Kafka 的集成,就可以自动将每个生产者和消费者进行集成、
5、分布式系统
Apache Kafka 是个分布式架构哦,具有可扩展性。分区和复制是分布式系统下的两种能力。
6、实时处理
Kafka 近乎实时地监控所有的数据通信,以实现访问控制,检测异常,并提供安全通信。这种架构能够与没有连接的遗留系统整合,以收集传感器数据,但也确保外部系统不能访问不安全的机器。
Kafka 使用场景
20220916-fa756550-a3b5-4bcd-92ff-cb9b3fcbdd6a.png1、消息
Kafka 有更强的吞吐量,内置分区,复制和容错功能,这使它成为处理大规模消息应用的解决方案。
2、网站活动追踪
Kafka 最初的使用场景是重建用户活动追踪管道,作为实时发布-订阅的消息流。
3、度量
Kafka 用于运维监控数据。这涉及到从分布式应用中聚合统计数据,以产生集中的运维数据。
4、日志聚合
许多人使用 Kafka 作为日志聚合解决方案的替代品。日志聚合通常收集服务器上的物理日志文件,并将它们放在一个中心位置(也行是文件服务器或HDFS)进行处理。Kafka 抽象了文件的细节,并给日志或事件数据的消息流创建了一个更简介的抽象。
5、流式处理
许多使用 Kafka 的用户在多个阶段组成的管道中处理数据,原始输入数据在 Kafka 主题中被消耗,丰富组合或转化后发给新的主题
6、事件溯源
事件溯源是一种应用程序的设计风格,将状态变化记录成一个时间序列记录。Kafka 支持日志数据的海量存储,这使得它成为该风格应用程序后端的出色选择。
Apache Kafka 应用
2010 年,LinkedIn 开发了 Apache Kafka 。由于 Kafka 是一个发布-订阅的消息系统,因此在 LinkedIn 的各种产品,如果 LinkedIn Today 和 LinkedIn Nesfeed 都使用它来消费消息。
Uber
Uber 使用 Kafka 作为消息总线来连接生态系统的不同部分。Kafka 帮助乘客和司机满足彼此的匹配。他从乘客的应用程序以及司机的应用程序中收集信息。然后将这些信息提供给下游的消费者。
由于 Kafka 满足了数据复制和持久性的需求,Twitter 已经成为 Apache Kafka 的最佳应用 / 用户之一。采用Kafka 使用 Twitter 节省了高达 75% 的大量资源,很好地降低了成本。
Netflix
Netflix 在 keystone Pipeline 下使用的 Kafka。Keystone 是一个统一的收集,事件发布和路由基础设施,用于流处理和批处理。
总结
Kafka 支持低延迟的消息传递,并在机器出现故障时提供容错保证。它可以处理大量不同的消费者。Kafka 的速度非常快。可以达到 200W次 / 秒的写入速度。