按照完整的代码示例为 Apache Kafka 构建连接器。
关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。
描述什么是开源的最好方式之一是说它是使知识民主化的艺术。我喜欢这个描述,因为它抓住了开源真正做的本质——分享人们可以用来解决反复出现的问题的知识。重复出现的问题是指共享相同上下文的不同人可能遇到的任何问题。构建 Apache Kafka 连接器就是一个很好的例子。不同的人可能需要构建一个,原因往往是需要与外部系统集成。在这篇博文中,我将分享一个非常好的 GitHub 存储库的详细信息,该存储库正是这样做的。
Kafka 连接器:什么、为什么以及何时
Apache Kafka本身只是一个哑管道。它允许您持久可靠地存储事件流,并与对获取数据副本或处理数据感兴趣的多个系统共享它们。为了传入和传出数据,Kafka 依赖于另一层称为Kafka Connect的技术。这是一个集成平台,允许构建者通过专用连接器连接不同的系统。有大量为不同系统开发的连接器,可在此处作为商业和免费产品使用. 但是,有些情况下您根本无法使用它们。其中一些连接器可能不适用于您打算连接的特定系统;也许您无法支付商业许可证的费用,或者它们可能无法提供您期望的确切支持。
这时您可能需要开发自己的 Apache Kafka 连接器。如果您知道如何使用 Java 开发应用程序;您可以利用 Kafka Connect 提供的 Java SDK 来开发您自己的连接器,无论它们是源还是接收器。源连接器将数据带入 Kafka 主题。他们读取源系统并处理他们的数据模式。水槽则相反。他们选择 Kafka 主题中可用的现有数据,并使用系统期望的模式写入外部系统。要开发自定义连接器,主要归结为遵循应用正确最佳实践的良好示例。
从 AWS re:Invent 2022 走向世界
在 AWS re:Invent 2022 大会期间,BOA(在 AWS 上构建)轨道包括一个实践研讨会,教授如何开发自定义 Apache Kafka 连接器,以及如何在 AWS 中部署它。研讨会的主要目的不仅是分享如何从头开始创建一个的具体细节,而且是分享如何按照正确的最佳实践创建一个。该研讨会的标题为BOA301:构建您自己的 Apache Kafka 连接器,并取得了成功。许多使用 Kafka 和Amazon MSK 的构建者都有相同的需求,了解他们用例的细节非常有益。这是BOA赛道的关键驱动力。与社区一起构建真实世界的解决方案,并深入研究代码和架构。
如果您错过了这次研讨会,这里有一些好消息要告诉您:我将研讨会变成了任何人都可以随时使用的可重用开源代码。在这个 GitHub 存储库中,您可以找到研讨会期间使用的代码以及我在研讨会期间尝试实施的工具和最佳实践。
https://github.com/build-on-aws/building-apache-kafka-connectors
该代码包括所有最新版本的 Apache Kafka API、研讨会期间富有成果的对话和收集的反馈的结果,以及连接器必须具备的所有功能。
完整的源连接器
GitHub 存储库包含源连接器的完整实现。连接器每 5 秒轮询一个虚构的源系统,从源系统访问 3 个不同的分区。每个源系统使用不同的逻辑实体(例如数据库中的表)来组织其数据。这就是分区的含义:包含数据集一部分的逻辑实体。连接器还展示了如何处理模式。对于处理的每条记录,它使用源系统添加到它的模式。
该连接器还展示了如何实现动态重新分区。这是当源连接器必须能够检测到要读取的分区数何时发生变化并决定处理新工作负载所需的任务数时。任务是连接器的执行单元。创建不同的任务允许连接器同时处理记录。例如,假设在部署连接器后,源系统中的分区数从 3 增加到 6。由于连接器会定期监视源系统以了解此类情况,因此会在上发出重新配置连接器的请求苍蝇。由于这种机制,不需要人为干预。
除了连接器实现之外,您还会发现一组为连接器必须执行的最简单任务而创建的 Java 测试。这包括对连接器配置、连接器生命周期和参数验证以及处理记录的线程的测试。这应该足以让您了解如何针对更详细的场景加强测试。说到测试,如果您需要在本地使用连接器,连接器实现有一个创建 Kafka 代理和 Kafka Connect 服务器的Docker Compose文件。两个容器都启动并运行后,您可以使用代码(在文件/examples夹中找到)提供的示例来测试连接器。所有这些的说明都可以在GitHub 存储库的自述文件中找到。
您想使用您最喜欢的 Java IDE 调试工具调试连接器代码吗?你也在那里请客。Docker Compose 文件经过仔细更改,以通过JDWP协议启用远程调试。每当您需要从 IDE 中使用断点调试代码时,只需启动一个指向localhost:8888. 这是 Kafka Connect 服务器已配置为绑定 JDWP 协议的端点。如果您使用代码创建自己的代码,并且您希望确保一切都按预期工作,这将很有用。
云端及其他
添加到连接器实现的另一个很酷的功能是如何使用Terraform部署连接器的完整示例。几分钟后,您就可以在 AWS 上启动并运行连接器代码,在Amazon MSK上为您创建一个 Kafka 集群,并在Amazon MSK Connect上正确部署连接器。完全部署所有内容后,代码还会创建一个堡垒服务器,您可以使用 SSH 从您的计算机连接该服务器以验证一切是否按预期工作。