Apache Kafka是一个开放源代码的分布式事件流平台,成千上万的公司使用它来实现高性能数据管道,流分析,数据集成和关键任务应用程序。
在《财富》 100强公司中 , 超过 80%的公司信任并使用Kafka。由此可以看到Kafka的流行程度。
接下来介绍一下Kafka的核心能力、生态和流行程度:
一、核心能力:
高吞吐量:
使用延迟低至2ms的计算机集群以网络受限的吞吐量传递消息。
可扩展性:
可以将生产集群扩展到多达一千个经纪人,每天数万亿条消息,PB级数据和数十万个分区。弹性扩展和收缩存储和处理。
持久化存储:
将数据流安全地存储在分布式,持久,容错的群集中。
高可用性:
在可用区上有效地扩展群集,或跨地理区域连接单独的群集。
二、生态系统:
内置流处理:
使用事件时间和精确一次的处理来处理具有连接,聚合,过滤器,转换等事件的事件流。
几乎连接任何东西:
Kafka的现成的Connect接口与数百个事件源和事件接收器集成在一起,包括Postgres,JMS,Elasticsearch,AWS S3等。
客户端库:
使用多种编程语言读取,写入和处理事件流。
大型生态系统开源工具:
大型的开源工具生态系统:利用大量社区驱动的工具。
三、信任和易于使用:
关键任务:
支持关键任务用例,保证有序的订购,零消息丢失和高效的一次处理。
受到成千上万组织的信任:
从互联网巨头到汽车制造商再到证券交易所,成千上万的组织使用Kafka。超过500万次独特的终身下载。
广大的用户社区:
Kafka是Apache Software Foundation五个最活跃的项目之一,在世界各地有数百次聚会。
丰富的在线资源:
丰富的文档,在线培训,指导教程,视频,示例项目,堆栈溢出等。
四、Kafka作为事件流平台,其核心功能有哪些?
Kafka结合了三个关键功能,因此您可以使用一个经过众多生产环境验证过的解决方案来端到端实施事件流的用例:
- 要发布(写)和订阅(读)流事件,包括来自其他系统的数据的持续导入/导出的。
- 为了存储持久和可靠的事件流,只要你想要的。
- 为了处理流的事件(Event),因为它们发生或追溯。
所有这些功能都以分布式,高度可扩展,弹性,容错和安全的方式提供。Kafka可以部署在裸机硬件,虚拟机和容器,本地以及云中。
五、Kafka概述
Kafka是一个分布式系统,由通过高性能TCP网络协议进行通信的服务器和客户端组成。它可以部署在内部以及云环境中的裸机硬件,虚拟机和容器上。
服务器:Kafka作为一台或多台服务器的集群运行,可以跨越多个数据中心或云区域。其中一些服务器构成了存储层,称为代理。其他服务器运行Kafka Connect来连续导入和导出数据作为事件流,以将Kafka与现有系统集成在一起,例如关系数据库以及其他Kafka群集。为了实现关键任务用例,Kafka群集具有高度的可扩展性和容错能力:如果其任何服务器发生故障,其他服务器将接管其工作,以确保连续运行而不会丢失任何数据。
客户端:它们使您可以编写分布式应用程序和微服务,即使在网络问题或机器故障的情况下,它们也可以并行,大规模且以容错的方式读取,写入和处理事件流。Kafka附带了一些这样的客户端,由Kafka社区提供的数十个客户端进行了扩展 :客户端可用于Java和Scala,包括更高级别的Kafka Streams库,Go,Python,C / C ++和许多其他编程语言以及REST API。
六、主要概念和术语
一个事件记录,在世界上或者在您的企业“出事”的事实。在文档中也称为记录或消息。当您向Kafka读取或写入数据时,您将以事件的形式进行操作。从概念上讲,Event具有键,值,时间戳和可选的元数据标题。这是一个示例事件:
- Event 键:“alice”
- Event值:“!bob 200$!”
- Event时间戳:“ 2020:06:25 14:06”
生产者是那些向Kafka发布(写入)事件的客户端应用程序,而消费者是那些订阅(读取和处理)这些事件的客户端应用程序。在Kafka中,生产者和消费者之间完全脱钩且彼此不可知,这是实现Kafka众所周知的高可伸缩性的关键设计元素。例如,生产者永远不需要等待消费者。Kafka提供各种保证,例如能够一次准确地处理事件。
活动被组织并持久地存储在主题中。非常简化,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。示例主题名称可以是“付款”。Kafka中的主题始终是多生产者和多用户的:一个主题可以有零个,一个或多个向其写入事件的生产者,以及零个,一个或多个订阅这些事件的使用者。可以根据需要随时读取主题中的事件-与传统的消息传递系统不同,使用后事件不会被删除。相反,您可以通过按主题配置设置来定义Kafka将事件保留多长时间,之后旧的事件将被丢弃。Kafka的性能相对于数据大小实际上是恒定的,因此长时间存储数据是完全可以的。
Kafka作为一个集群运行在一个或多个可跨多个数据中心的服务器上。
Kafka集群以称为 topics主题 的类别存储记录流。
每条记录都包含一个键,一个值和一个时间戳。
分区的意义是什么?
主题(Topic)已分区,这意味着主题(Topic)分布在位于不同Kafka经纪人上的多个“存储桶”中。数据的这种分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个代理读取数据或向多个代理写入数据。将新事件发布到主题时,实际上会将其附加到主题的分区之一。具有相同事件键(例如,客户或车辆ID)的事件将写入同一分区,并且Kafka保证,给定主题分区的任何使用者都将始终以与写入时完全相同的顺序读取该分区的事件。
为了使您的数据具有容错性和高可用性,可以在每个地理区域或数据中心之间复制每个主题,以便始终有多个代理拥有数据副本,以防万一出错。对经纪人进行维护,等等。常见的生产设置是3的复制因子,即,始终会有三个数据副本。此复制在主题分区级别执行。
七、Kafka API
除了用于管理和管理任务的命令行工具外,Kafka还具有用于Java和Scala的五个核心API:
- 该Admin API来管理和检查的话题,经纪人和其他卡夫卡对象。
- 该Producer API(生产者API)公布(写)事件流,以一个或多个卡夫卡的话题。
- 该Consumer API(消费者API)订阅(读取)一个或多个主题和过程中产生的重要事件流。
- 在Streams API(流API)来实现流处理应用程序和微服务。它提供了更高级别的功能来处理事件流,包括转换,诸如聚合和联接之类的有状态操作,窗口,基于事件时间的处理等等。从一个或多个主题读取输入,以便生成一个或多个主题的输出,从而有效地将输入流转换为输出流。
- 在 Connector API(连接器API)来构建和运行可重复使用的数据导入/导出接口消耗(读)或产生(写)和从外部系统和应用程序,使他们能够与卡夫卡整合事件流。例如,关系数据库(如PostgreSQL)的连接器可能会捕获对一组表的所有更改。但是,实际上,您通常不需要实现自己的连接器,因为Kafka社区已经提供了数百个随时可用的连接器。
在Kafka中,客户端和服务器之间的通信是通过简单,高性能,语言无关的TCP协议完成的。此协议已版本化并保持与旧版本的向后兼容性。Kafka提供Java客户端,但客户端有多种语言版本。
八、总结
Kafka是LinkedIn开源的分布式发布-订阅消息系统,属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,应用于非业务场景,数据量超级大的那种应用场景。对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
喜欢本文的朋友,欢迎关注、转发、评论,全网账号同名!