Apache Kafka®是一个非常成功的数据基础设施,作为现代企业中无处不在的分布式日志发挥作用。它是可扩展的,可作为管理服务使用,并且有简单的API,几乎可以使用任何你想要的语言。但是,尽管Kafka作为公司数据的中枢神经系统做得很好,还有许多不是Kafka的系统,你仍然必须与之对话。为每一个系统写定制的数据集成代码会让你一次又一次地写同样的模板和未提取的框架代码。这也是另一种说法,如果Kafka生态系统还没有Kafka Connect,我们就必须发明它。
Kafka Connect是Kafka的可插拔、声明式数据集成框架。它将数据汇和源连接到Kafka,让生态系统的其他部分做它所擅长的充满事件的主题。与任何基础设施的情况一样,在你坐下来使用它之前,你会想知道一些要点,即设置和配置、部署、错误处理、故障排除、其API和监控。Confluent Developer最近发布了一个涵盖这些主题的Kafka Connect课程,在下面的每个部分,我想分享一下课程中每节课的内容。
Kafka Connect简介
Kafka Connect的声明性使得每个人都能在Kafka生态系统内进行数据整合,即使你通常不写代码。Kafka Connect的功能取代了你必须编写、部署和照顾的代码。因此,你的应用程序不需要面对多次写入问题和交易一致性问题,它可以专注于它的主要功能,而Kafka Connect将其数据流化并独立写入另一个云服务或数据存储--甚至几个--例如使用Confluent的S3、Salesforce、Snowflake和MongoDB Atlas的完全管理连接器。
在这段视频中,你会看到Kafka与自我管理的Kafka Connect在运行,通过Debezium CDC从MySQL源获取数据,进入Kafka,然后输出到Elasticsearch和Neo4j,在那里对数据进行了近乎实时的可视化。
配置、连接器、转换器和转换
Kafka Connect工作者的主要功能是帮助你把数据从源头拿到汇中。有几个内部组件可以帮助完成这个任务。*连接器执行Kafka与外部数据源的实际对接,实现这些数据源和汇的任何外部协议,并在另一端与Kafka对接。转换器在事件上执行无状态函数,将它们转化为目标系统的正确格式(添加元数据、删除列等)。最后,转换器*在数据进入或离开Kafka的过程中对其进行序列化或反序列化。这三个组件都是可扩展的,尽管你很少需要写自己的代码,因为Confluent Hub上有数百个代码,都可以通过特定任务的CLI轻松访问。
部署
使用Kafka Connect的最简单方法是通过Confluent Cloud的管理连接器。通过对你的数据源和汇的检查设置,你可以快速开始建立你的数据管道。但也许由于监管问题或基础设施要求,你不能使用云,或者你想使用的连接器只能在本地使用。要部署你自己的Kafka Connect实例,你需要选择独立模式和分布式模式。后者被推荐用于几乎所有的安装--甚至是简单的原型--因为它不难使用,而且当你进入生产阶段时,你很可能需要它的容错性和水平扩展。本系列的教程也在Docker容器中使用分布式模式的Kafka Connect。
在Docker容器中运行Kafka Connect
容器化的Kafka Connect是一种简化的入门方式,Confluent维护了一个Docker基础镜像,你可以使用。你需要为你的连接器和其他组件添加依赖项,你可以从Confluent Hub的审核列表中获取这些依赖项,并将其 烘焙到新的镜像中,或者如果你坚持的话,将其设置为在运行时安装。
排除常见的问题以及如何调试这些问题
数据集成本质上是容易出错的,因为它依赖于事物之间的连接,即使Connect本身从未产生过任何错误。堆栈跟踪和日志将帮助你解决大多数问题,但在你涉足之前,你需要了解一些基础知识。例如,以一个运行中的连接器和一个失败的任务为例:如果你从检查任务的堆栈跟踪开始排除故障,然后继续检查你的Kafka Connect日志--你会很快了解到导致问题的原因。最近完成的Kafka改进建议(KIPs)解决了Connect中的动态日志配置问题,以及Connect日志信息的额外上下文,使这项工作变得更加愉快。
错误处理和死信队列
了解你在Kafka Connect中的错误处理选项可以帮助你面对数据序列化的挑战,这些挑战可能会在你整合来自众多来源的数据时出现。你的选择超出了默认的出错时关闭的范围。例如,一个流行的策略是使用水槽连接器将不正确的序列化消息收集到一个死信队列中,然后通过不同的转换器将它们重新路由到最终的成功。在其他情况下,如果失败的原因难以提前确定,可能需要一个手动选项来处理错误的消息。
REST API
使用PUT创建连接器和以编程方式获取连接器的相关主题名称等最佳做法,可以通过REST改善对Kafka Connect实例的管理。还有一些小技巧,比如用jq打印JSON,用peco进行交互式命令输出过滤,这些都会让你的REST交互更有活力。Confluent的Connect REST API文档(当使用完全管理的连接器时,也可参见Confluent Cloud文档)是详细命令细节的最佳来源,但对基础知识的概述是开始使用Kafka Connect强大API的好方法。
Confluent的指标和监控
如果在Confluent云中完全管理Kafka Connect对你来说是可行的,这是最直接的方式来完成你的整合,因为你必须自己管理零基础设施。如果你确实喜欢自我管理Kafka Connect,那么请允许我推荐使用Confluent Platform。在这两种情况下,你都有广泛的图形化监控工具,让你快速获得数据管道的概览。从概览中,你可以深入到每个管道的消费者列表中,然后一步步深入到他们的具体情况--看到实时统计数据,如主题消耗信息和分区偏移。如果你没有使用Confluent Cloud或Confluent Platform,你监控Kafka Connect的选择是JMX指标和REST,因为你的Kafka Connect实例本身暴露了大量信息。
总结
现在你已经了解了Kafka Connect的内部结构和功能,以及一些你可以使用的策略,下一步是尝试建立和运行一个实际的Kafka Connect部署。查看Confluent Developer上免费的Kafka Connect 101课程,了解针对上述每个主题的代码学习教程,以及深入的文本指南和外部资源链接。
你还可以收听播客《Kafka Connect介绍》。核心组件和架构,或者报名参加 "从零到英雄的Kafka Connect "会议,了解更多关于Kafka Connect的关键设计理念。在见面会上,你会看到用Kafka Connect构建管道的现场演示,将数据从数据库中流进,再流到Elasticsearch等目标。
Tim Berglund是Confluent的老师、作者和技术领导者,他在Confluent担任开发者宣传高级总监。他经常在美国和世界各地的会议上发言。他是O'Reilly公司各种培训视频的共同主持人,主题包括Git和分布式系统,并且是Gradle Beyond the Basics的作者。他和他年轻时的妻子住在美国科罗拉多州的利特尔顿,他们的三个孩子已经长大成人。