Apache Kafka 是著名的开源事件存储和流处理平台,现已发展成为数据流事实上的标准。 在本文中,开发人员 Michael Burgess 深入介绍了模式和模式管理的概念,以此为完全托管的 Kafka 服务上的事件驱动应用程序增加价值, IBM Cloud 上的 IBM Event Streams®。
什么是架构?
模式描述了数据的结构。
例如:
一个简单的 Java 类对在线商店中某些产品的订单进行建模可能以以下字段开头:
public class Order{
private String productName
private String productCode
private int quantity
[…]
}
如果使用此类创建订单对象并将其发送到 Kafka 中的主题,我们可以使用如下 Avro 架构之类的架构来描述这些记录的结构:
{
"type": "record",
"name": “Order”,
"fields": [
{"name": "productName", "type": "string"},
{"name": "productCode", "type": "string"},
{"name": "quantity", "type": "int"}
]
}
为什么应该使用模式?
Apache Kafka 传输数据时不验证消息中的信息。 它无法了解正在发送和接收的数据类型,或者可能包含的数据类型。 Kafka 不会检查消息的元数据。
Kafka 的功能之一是解耦消费应用程序和生产应用程序,以便它们通过 Kafka 主题而不是直接进行通信。 这使得他们能够以自己的速度工作,但他们仍然需要就相同的数据结构达成一致; 否则,消费应用程序无法将它们接收到的数据反序列化回有意义的数据。 所有应用程序都需要共享有关数据结构的相同假设。
在 Kafka 范围内,模式描述了消息中数据的结构。 它定义了每条消息中需要出现的字段以及每个字段的类型。
这意味着模式在生产应用程序和消费应用程序之间形成了明确定义的契约,允许消费应用程序正确解析和解释它们接收到的消息中的数据。
什么是模式注册表?
模式注册表通过提供用于管理和验证集群内模式的存储库来支持您的 Kafka 集群。 它充当存储模式的数据库,并提供用于管理模式生命周期和检索模式的界面。 模式注册表还验证模式的演变。
使用架构注册表优化您的 Kafka 环境。
模式注册表本质上是 Kafka 环境中数据结构的协议。 通过在应用程序中存储一致的数据格式,您可以避免构建应用程序时可能出现的常见错误,例如数据质量差以及生产应用程序和使用应用程序之间的不一致,最终可能导致数据损坏。 拥有管理良好的模式注册表不仅是技术上的必要条件,而且有助于实现将数据视为有价值的产品的战略目标,并对您的数据即产品之旅有巨大帮助。
使用架构注册表可以通过强制实施架构演变规则来提高数据质量并确保数据保持一致。 因此,除了确保生成的消息和使用的消息之间的数据一致性之外,模式注册表还可确保您的消息在模式版本随时间变化时保持兼容。 在业务的生命周期中,支持业务的应用程序交换的消息格式很可能需要更改。 例如,我们之前使用的示例模式中的 Order 类可能会获得一个新的状态字段 – 产品代码字段可能会被部门编号和产品编号的组合替换,或者进行类似的更改。 结果是我们业务领域中的对象架构不断发展,因此您需要能够确保在任何给定时间就任何特定主题中的消息架构达成一致。
模式演化有多种模式:
- 前向兼容性:生产应用程序可以更新到架构的新版本,并且所有消费应用程序将能够在等待迁移到新版本的同时继续消费消息。
- 向后兼容性:消费应用程序可以首先迁移到新版本的架构,并且能够在迁移生产应用程序时继续消费以旧格式生成的消息。
- 完全兼容性:模式既向前又向后兼容。
模式注册表能够强制执行模式演变规则,使您能够保证新模式版本的向前、向后或完全兼容,从而防止引入不兼容的模式版本。
通过提供 Kafka 集群中过去和现在使用的模式版本的存储库,模式注册表简化了对数据治理和数据质量策略的遵守,因为它提供了一种方便的方法来跟踪和审核主题数据格式的更改。
下一步是什么?
总之,模式注册表在管理分布式系统中的模式演变、版本控制和数据一致性方面发挥着至关重要的作用,最终支持不同组件之间的互操作性。 IBM Cloud 上的 Event Streams 提供架构注册表作为其企业计划的一部分。 利用 IBM Cloud 上完全托管的 Kafka 产品上的此功能来构建实时响应事件的智能且响应迅速的应用程序,确保您的环境得到优化。
- 在 IBM Cloud 上配置 Event Streams 的实例 这里。
- 了解如何使用 Event Streams 架构注册表 这里。
- 了解有关 Kafka 及其用例的更多信息 这里。
- 对于设置中的任何挑战,请参阅我们的 入门指南 和 常见问题解答。