什么是事件流
从技术上讲,事件流是指以事件流的形式从数据库、传感器、移动设备、云服务和软件应用等事件源实时捕获数据的实践;持久地存储这些事件流以备以后检索;实时和回顾性地操作、处理和响应事件流;并根据需要将事件流路由到不同的目的地技术。因此,事件流确保了数据的连续流和解释,使正确的信息在正确的地方,在正确的时间
我可以使用事件流做什么
实时处理支付和金融交易,如股票交易所、银行和保险
实时跟踪和监控汽车、卡车、车队和运输,如物流和汽车行业。
持续捕获和分析来自物联网设备或其他设备的传感器数据,如工厂和风电场。
收集并立即响应客户的互动和订单,如零售、酒店和旅游行业,以及移动应用程序。
监测住院病人,预测病情变化,确保在紧急情况下及时治疗
作为数据平台、事件驱动架构和微服务的基础。
连接、存储公司不同部门产生的数据并使其可用。
Apache Kafka是一个事件流平台
发布(写入)和订阅(读取)事件流,包括持续导入
根据需要持久可靠地存储事件流。
在事件发生时或追溯性地处理事件流。
所有这些功能都是以分布式、高度可伸缩、弹性、容错和安全的方式提供的。
Kafka是如何工作的
Kafka是一个分布式系统,由服务器和客户端组成,通过高性能的TCP网络协议进行通信。它可以部署在裸金属硬件、虚拟机和内部环境中的容器上,也可以部署在云环境中
Servers:Kafka作为一个集群运行一个或多个服务器,可以跨越多个数据中心或云区域。其中一些服务器构成存储层,称为brokers。其他服务器运行Kafka Connect来持续导入和导出数据作为事件流,将Kafka与您现有的系统集成,如关系数据库以及其他Kafka集群。为了让你实现关键任务的用例,Kafka集群是高度可伸缩和容错的:如果它的任何一个服务器发生故障,其他服务器将接管他们的工作,以确保在没有任何数据的情况下持续操作。
Clients:它们允许您编写分布式应用程序和微服务,即使在出现网络问题或机器故障的情况下,它们也可以并行、大规模和容错方式读取、写入和处理事件流。Kafka 附带了一些这样的客户端,这些客户端由 Kafka 社区提供的数十个客户端进行了扩充:客户端可用于 Java 和 Scala,包括更高级别的 Kafka Streams 库,用于 Go、Python、C/C++ 和许多其他编程 语言以及 REST API。
主要概念和术语
事件(event)记录了在世界上或你的企业中“发生了某事”的事实。在文档中也称为记录或消息。当你读或写数据到Kafka时,你以事件的形式做这件事。从概念上讲,事件具有键、值、时间戳和可选的元数据头。这里有一个例子
Event key: "Alice"
Event value: "Made a payment of $200 to Bob"
Event timestamp: "Jun. 25, 2020 at 2:06 p.m."
Producers是那些向Kafka发布(写)事件的客户端应用程序,而consumers是那些订阅(读和处理)这些事件的应用程序。在Kafka中,生产者和消费者是完全解耦的,彼此是不可知的,这是实现Kafka闻名的高可扩展性的一个关键设计元素。例如,生产者从不需要等待消费者。Kafka提供了各种各样的保证,比如精确处理一次事件的能力
Events被组织并持久地存储在topics。很简单,一个topic类似于文件系统中的一个文件夹,events就是该文件夹中的文件。一个示例topic名称可以是“payments”。Kafka中的topic总是多生产者和多订阅者:一个topic可以有0个、1个或多个producer向它写入事件,也可以有0个、1个或多个consumer订阅这些事件。与传统消息传递系统不同,主题中的事件在使用后不会删除。相反,你定义Kafka应该保留你的ev多长时间
主题是分区的,这意味着一个主题分散在位于不同Kafka broker上的多个“桶”上。数据的这种分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从/向多个代理读取和写入数据。当一个新事件发布到一个主题时,它实际上被附加到该主题的分区之一。具有相同事件键(例如,客户或车辆 ID)的事件被写入同一分区,并且 Kafka 保证给定主题分区的任何消费者将始终以与写入事件完全相同的顺序读取该分区的事件。

💡
图:这个示例主题有四个分区P1 P4。两个不同的生产者客户端通过网络向主题的分区写入事件,从而彼此独立地向主题发布新事件。具有相同键的事件(图中通过它们的颜色表示)被写入同一个分区。注意,如果合适的话,两个生产者都可以写入同一个分区。
为了使数据具有容错性和高可用性,每个主题都可以复制,甚至可以跨地理区域或数据中心复制,这样就会有多个broker都有数据的副本以防出错.。一个常见的设置是复制因子3,也就是说,您的数据总是有三个副本。这个复制是在主题分区级别执行的。




