kafka学习

Kafka 是什么?适合什么场景?核心术语(Producer、Consumer、Broker、Topic、Partition)

What is kafka

https://www.youtube.com/watch?v=vHbvbwSEYGo&t=1s

kafka是事件驱动的消息传递系统,旨在处理实时的数据流,支持小服务之间的高效通信。对比与数据库存储状态*(State)*,kafka更倾向于存储事件*(Event)*,或者说作为日志存储,它通过主题*(Topics)*来组织和存储这些事件,同时kafka还具有持久化存储这些主题的功能,保证数据的可靠性和可用性。

用户更新信息、货物卸载或者设备报告都可以看作是一个事件,这些事件在kafka中以主题的方式进行存储,每个微服务都可以通过kafka进行高效的通信,将处理之后的消息送到其他主题。同时它提供了实时分析数据的可能性,不再是传统的批处理数据的方式。


Apache Kafka

What is event streaming

从技术角度上来说,事件流是一种从事件源(如数据库、传感器、移动设备、云服务和软件应用程序)实时捕获事件流形式的数据的做法;持久存储这些事件流以供日后检索;实时和回顾性地操纵、处理和响应事件流;并根据需要将事件流路由到不同的目标技术。因此,事件流可确保数据的连续流动和解释,以便正确的信息在正确的时间出现在正确的位置。

What can I use event streaming for?

  • To process payments and financial transactions in real-time, such as in stock exchanges, banks, and insurances.

    实时处理付款和金融交易,例如在证券交易所、银行和保险公司。

  • To track and monitor cars, trucks, fleets, and shipments in real-time, such as in logistics and the automotive industry.

    实时跟踪和监控汽车、卡车、车队和货物,例如在物流和汽车行业。

  • To continuously capture and analyze sensor data from IoT devices or other equipment, such as in factories and wind parks.

    持续捕获和分析来自物联网设备或其他设备(例如工厂和风力发电场)的传感器数据。

  • To collect and immediately react to customer interactions and orders, such as in retail, the hotel and travel industry, and mobile applications.

    收集并立即响应客户互动和订单,例如在零售、酒店和旅游行业以及移动应用程序中。

  • To monitor patients in hospital care and predict changes in condition to ensure timely treatment in emergencies.

    监测住院患者并预测病情变化,以确保在紧急情况下及时治疗。

  • To connect, store, and make available data produced by different divisions of a company.

    连接、存储并提供公司不同部门生成的数据。

  • To serve as the foundation for data platforms, event-driven architectures, and microservices.

    作为数据平台、事件驱动架构和微服务的基础。

Apache Kafka® is an event streaming platform. What does that mean?

  1. To publish (write) and subscribe to (read) streams of events, including continuous import/export of your data from other systems.

    发布 (写入)和订阅 (读取)事件流,包括连续导入/导出 来自其他系统的数据。

  2. To store streams of events durably and reliably for as long as you want.

    按照您需要的时间持久可靠地存储事件流。

  3. To process streams of events as they occur or retrospectively.

    在事件流发生时或回顾性地处理它们。

How does Kafka work in a nutshell?

kafka是一个C/S分布式系统,通过TCP网络协议进行通信。

服务器 :Kafka 作为一个或多个服务器的集群运行,可以跨越多个数据中心 或云区域。其中一些服务器构成存储层,称为**代理(brokers)**。其他服务器运行 Kafka Connect 持续导入和导出 将数据作为事件流,以便将 Kafka 与现有系统(如关系数据库)集成,以及 其他 Kafka 集群。为了让您实现关键任务用例,Kafka 集群具有高度可扩展性 具有容错能力:如果任何服务器发生故障,其他服务器将接管其工作,以确保 持续操作,不会丢失任何数据。

客户端 :它们允许你编写分布式应用程序和微服务,用于读取、写入、 并大规模并行处理事件流,即使在网络情况下也能以容错的方式 问题或机器故障。Kafka 附带了一些这样的客户端,它们通过以下方式增强: Kafka 提供的数十个客户端 社区:Java 和 Scala 客户端可用,包括更高级别的 Kafka Streams 库,适用于 Go、Python、C/C++ 和 许多其他编程语言以及 REST API。

Main Concepts and Terminology

  • 事件:记录了世界上或您的业务中“发生了某事”的事实。在文档中,它也被称为记录或消息。当您向 Kafka 读取或写入数据时,您以事件的形式执行此操作。从概念上讲,事件具有键、值、时间戳和可选的元数据标头。
  • 生产者与消费者:生产者是向 Kafka 发布(写入)事件的客户端应用程序,而消费者是订阅(读取和处理)这些事件的应用程序。在 Kafka 中,生产者和消费者完全解耦且彼此无关,这是实现 Kafka 所著称的高可扩展性的关键设计元素。例如,生产者永远不需要等待消费者。Kafka 提供各种保证 ,例如能够精确处理一次事件。

如何保证精确处理一次事件?为何要保证精确处理一次事件?

  • 主题:事件被组织并持久存储在主题中。非常简单,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。主题名称的示例可以是“payments”。Kafka 中的主题始终是多生产者和多订阅者的:一个主题可以有零个、一个或多个向其写入事件的生产者,以及零个、一个或多个订阅这些事件的消费者。主题中的事件可以根据需要随时读取 - 与传统消息传递系统不同,事件在使用后不会被删除。相反,您可以通过每个主题的配置设置来定义 Kafka 应保留事件多长时间,超过该时间后旧事件将被丢弃。Kafka 的性能在数据大小方面实际上是恒定的,因此长时间存储数据是完全没问题的。
  • 分区:主题是分区的 ,这意味着主题分布在位于不同 Kafka 代理上的多个“存储桶”中。这种数据的分布式放置对于可扩展性非常重要,因为它允许客户端应用程序同时从多个代理读取数据或向多个代理写入数据。当新事件发布到主题时,它实际上被附加到主题的某个分区中。具有相同事件键(例如客户或车辆 ID)的事件被写入同一个分区,Kafka 保证给定主题分区的任何消费者将始终按照写入顺序读取该分区的事件。

如何保证消息的顺序性?

为了使您的数据具有容错性和高可用性,每个主题都可以复制 ,甚至可以跨地理区域或数据中心复制,这样总会有多个代理拥有数据的副本,以防出现问题,您想要对代理进行维护等。常见的生产设置是复制因子为 3,即始终有三个数据副本。此复制是在主题分区级别执行的

Kafka APIs

  • Admin API:管理和检查主题、代理和其他kafka
  • Producer API:生产者
  • Consumer API:消费者
  • Kafka Streams API:流处理应用程序和微服务。提供更高级的函数处理事件流,包括转换、状态操作(如聚合和连接)、窗口化、基于事件时间的处理等。从一个或多个主题读取输入以生成一个或多个主题的输出,从而有效地将输入流转换为输出流。
  • Kafka Connect API:构建和运行可重复使用的数据导入/导出连接器,这些连接器使用(读取)或生成(写入)来自外部系统和应用程序的事件流,以便与 Kafka 集成。例如,关系数据库(如 PostgreSQL)的连接器可能会捕获一组表的每次更改。然而,在实践中,您通常不需要实现自己的连接器,因为 Kafka 社区已经提供了数百个现成的连接器。

总结

  • Producer是什么
    是消息的生产者,应用程序作为事件的生产者,并将通过TCP发送到对应topic的broker中
  • Consumer是什么
    是消息的消费者,应用程序作为事件的消费者,并通过TCP读取到对应topic的broker中的数据
  • Broker是什么
    是消息存储服务器,用于持久化存储对应的消息,负责处理Producer和Consumer的请求,是kafka的核心节点
  • Topic是什么
    是消息归类的单位,类似于文件系统的文件夹,将各个消息归类
  • Partition是什么
    是 Topic 的物理分区单元,是 Kafka 实现分布式存储与并发处理的核心机制。每条消息会写入某个 Partition 中,Kafka 会将 Topic 拆分为多个 Partition 并分布到多个 Broker 上,从而支持高吞吐和扩展性。

问题:Partition与Broker的关系是什么?

答:

一个 Topic 会被划分为多个 Partition,这些 Partition 会被分布存储在不同的 Broker 上

每个 Partition 只能属于一个 Broker,但一个 Broker 可以存储多个 Partition(甚至来自不同 Topic)。这样实现了分布式存储并行处理。Kafka 会根据 Partition 数量和 Broker 数量进行负载均衡分配。

你可以类比成:

• Topic:图书馆

• Partition:图书馆的书架(存储实际书籍/消息)

• Broker:图书馆的分馆(多个分馆里各有书架)

1
2
3
4
5
6
7
graph LR
A[Producer] -->|Send message| B[Kafka Broker 1]
A --> B2[Kafka Broker 2]
B --> T1[Topic-A Partition-0]
B2 --> T2[Topic-A Partition-1]
T1 --> C[Consumer Group]
T2 --> C