27.1 Apache Kafka简介

27.1.1导言

从数据的角度,每个组织都以非常简单的方式开始工作。 组织的数据生态系统以一个源系统和一个目标开始。 源系统向目标系统发送数据,就是这样。 轻松吧?
如果这样简单的话。 企业的规模很快超过了简单的设置,源系统和目标系统的数量也迅速增加。 所有这些不同的来源和目标都需要相互交换数据,而且事情会很快变得非常复杂。
例如,如果组织有4个源和6个目标,并且所有这些应用程序都需要相互沟通,则您将需要构建24个集成……这些集成都有其自身的困难:

  • 协议:数据传输方式(TCP、HTTP、REST、FTP…)
  • 数据格式:如何解析数据(二进制、CSV、JSON、Parquet、…)
  • 数据模式和演变:什么是数据模型,它将如何演变?

此外,每次将源系统连接到目标系统时,这些系统都会从该连接增加负载。

你怎么解决这个? 这就是Apache Kafka的出处。 Apache Kafka允许组织通过提供通用、高吞吐量的分布式消息传递系统来分离数据流和系统。 源系统会将其数据发送到Apache Kafka,目标系统将使用来自Apache Kafka的数据。

想想企业必须管理的所有类型的数据源:

  • 网站事件
  • 移动设备应用程序事件
  • POS事件
  • CRM数据
  • callcenter数据
  • 交易历史记录

想想企业在其生态系统中使用的所有类型的目标体验,所有这些目标都可能需要来自这些源系统的数据:

  • CRM
  • 数据湖
  • 电子邮件系统
  • 审核
  • analytics

Apache Kafka由LinkedIn创建,现在是一个主要由Confluent维护的开源项目。
Apache Kafka提供了可容错的分布式、可复原的架构。 它可以横向扩展到100多个经纪人,并可以每秒扩展到数百万条报文。 它提供了低于10毫秒的高性能,非常适合实时用例。

几个用例示例:

  • 报文传送系统
  • 活动跟踪
  • 从多个不同位置收集量度
  • 应用程序日志收集
  • 流处理(使用Kafka Streams API或Spark)
  • 系统依赖的解耦
  • 与Spark、Flink、Storm、Hadoop和许多其他大数据技术集成。

例如:

  • Netflix使用Kafka在您观看电视节目时实时应用推荐
  • Uber使用Kafka实时收集用户、出租车和行程数据,以实时计算和预测需求,并计算激增定价
  • linkedIn使用Kafka来防止垃圾邮件,收集用户交互以实时提供更好的连接建议

对于所有这些用例,Kafka仅用作运输机构。 Kafka非常擅长在应用程序之间移动数据。

27.1.2 Kafka术语

消息

消息是由系统发送到Kafka的通信。 消息包含有效负载,而有效负载包含数据元素。 例如,网站发送到Adobe Experience Platform的体验事件会被视为消息。

主题、分区、偏移

主题是特定的数据流,类似于数据库中的表。 您可以拥有所需数量的主题,并且主题由其名称标识。 主题在分区中拆分。 每个分区按顺序排列,分区内的每条消息都会获得一个增量id,该id称为​offset。 消息存储在分区上的主题中,并使用偏移引用。 消息的保留时间有限(默认为1周)。 将消息写入分区后,便无法再更改该消息。

经纪人

代理与服务器类似。 Kafka群集由多个经纪人(服务器)组成。 每个代理均使用ID进行标识,并包含某些主题分区。

复制

Kafka是一个分布式系统。 分布式系统的一个重要内容是,数据是安全存储的,因此需要复制。 毕竟,当一个代理(服务器)出现故障时,另一个代理(服务器)仍然能够提供对最初存储在故障代理上的消息的访问。 复制将创建跨多个代理的报文副本,以保证不会丢失任何数据。

生产商

数据如何发送到Kafka? 这是制作人的角色。 制造者连接到源系统并从源系统获取数据,然后将该数据写入主题到分区。 根据Kafka群集的配置,生产者将自动知道要写入哪个代理和分区。 在具有多个代理和复制策略的分布式系统中,生产商将随机存储跨多个代理的数据,这意味着它将自动执行负载平衡。

消息键

生产者可以选择发送带信息的密钥。 键可以是任何字符串、数字等。 如果未提供密钥,则会随机向经纪人发送消息。 如果发送了密钥,则该密钥的所有消息将始终转到同一分区。 这样的消息键用于根据特定字段对消息进行排序。

消费者

消费者从Apache Kafka主题中读取数据,然后将该数据与目标系统共享。 消费者知道要从哪个经纪人那里读东西。 消费者在每个分区内按顺序读取数据。 消费者读取消费者组中的数据。

动物饲养员

ZooKeeper本质上是一种分布式系统的服务,它提供分层密钥值存储,用于为大型分布式系统提供分布式配置服务、同步服务和命名注册。 在您使用Apache Kafka之前,需要先运行Zookeeper,Zookeeper就是Kafka的主控仪式,它管理后端的分布式服务,而Kafka则生成和使用事件。

您已完成此练习。

下一步:24.2安装和配置Kafka群集

返回到模块24

返回到所有模块

在此页面上