阿里云消息队列 Kafka 生态集成的实践与探索

简介: 阿里云消息队列 Kafka 生态集成的实践与探索

作者:尘辉

消息队列 Kafka 简介


Apache Kafka是一个分布式流平台,作为互联网领域不可或缺的消息组件,在全球获得了广泛的应用。在使用过程中,Kafka一般被作为消息流转的核心枢纽,上下游系统通过Kafka实现异步,削峰填谷。在大数据处理和实时数据处理领域Kafka也是不可替代的组件。


Kafka使用非常广泛,在有些领域使用已经非常成熟,如日志收集,大数据处理,数据库等领域。Kafka跟上下游也有标准化的对接模块,如日志收集有Flume,Filebeat,Logstash,大数据处理有spark,flink等组件。同时在一些小众的领域则没有现成的工具可以直接对接,如对接某个小众的数据库,或者用户自己定制化的系统。这时一般的对接方法是自行开发Kafka生产消费程序对接。


在不同系统对接时通常会遇到以下问题:

  • 公司的不同团队对同一个系统有对接需求,各自开发重复造轮子,且实现方式不一,升级运维成本高。
  • 各子系统由不同的团队开发,因此,各系统中的数据在内容和格式上,存在天然的不一致性,需要进行格式处理,以消除各系统数据之间格式的不同。


基于Kafka使用的广泛度和上下游系统的多样性考虑,Kafka推出了内置的上下游系统对接框架Kafka Connect。

image.png

Kafka Connect 介绍


Kafka Connect是一个用于将数据流输入和输出Kafka的框架。下面介绍connector的一些主要概念:

  • Connectors:通过管理task来协调数据流的高级抽象
  • Tasks:如何将数据复制到Kafka或从Kafka复制数据的实现
  • Workers:执行Connector和Task的运行进程
  • Converters:用于在Connect和外部系统发送或接收数据之间转换数据的代码
  • Transforms:更改由连接器生成或发送到连接器的每个消息的简单逻辑


Connectors

Kafka Connect中的connector定义了数据应该从哪里复制到哪里。connector实例是一种逻辑作业,负责管理Kafka与另一个系统之间的数据复制。


connector有一些开源的实现。同时用户也可以从头编写一个新的connector插件,编写流程一般如下:

image.png

Tasks

Task是Connect数据模型中的主要处理数据的角色。每个connector实例协调一组实际复制数据的task。通过允许connector将单个作业分解为多个task,Kafka Connect提供了内置的对并行性和可伸缩数据复制的支持,只需很少的配置。这些任务没有存储任何状态。任务状态存储在Kafka中的特殊主题config.storage.topic和status.storage.topic中。因此,可以在任何时候启动、停止或重新启动任务,以提供弹性的、可伸缩的数据管道。

image.png

Task再平衡

当connector首次提交到集群时,workers会重新平衡集群中的所有connector及其tasks,以便每个worker的工作量大致相同。当connector增加或减少它们所需的task数量,或者更改connector的配置时,也会使用相同的重新平衡过程。当一个worker失败时,task在活动的worker之间重新平衡。当一个task失败时,不会触发再平衡,因为task失败被认为是一个例外情况。因此,失败的task不会被框架自动重新启动,应该通过REST API重新启动。

image.png

Converters

在向Kafka写入或从Kafka读取数据时,Converter是使Kafka Connect支持特定数据格式所必需的。task使用转换器将数据格式从字节更改为连接内部数据格式,反之亦然。


默认提供以下converters:

  • AvroConverter:与Schema Registry一起使用;
  • JsonConverter:适合结构数据;
  • StringConverter:简单的字符串格式;
  • ByteArrayConverter:提供不进行转换的“传递”选项;


转换器与连接器本身解耦,以便在连接器之间自然地重用转换器。

image.png

Transforms

Connector可以配置转换,以便对单个消息进行简单且轻量的修改。这对于小数据的调整和事件路由十分方便,且可以在connector配置中将多个转换链接在一起。


开源问题


Kafka connect线下单独部署时,设计的很不错了,但作为一个云服务提供时,还是存在了不少的问题,主要体现在以下几点:

  • 与云服务的集成度不好:云厂商有不少闭源产品,对于开源产品的云托管版也会有访问控制等问题。
  • 占用Kafka集群资源:每个connector任务都需要三个内置元信息topic,占用云产品资源,对于元信息topic的误操作也会导致任务异常。
  • 运维管控接口和监控简单:管控接口没法控制运行资源粒度,监控缺少connector任务维度的指标。
  • 与云原生架构结合不好:架构初始设计并非云原生,任务之间隔离度不够,负载均衡算法简单,没有动态自平衡能力。


基于Kafka connect部署在云上的种种问题,消息队列Kafka团队在兼容原生kafka connect框架的前提下,以云原生的方式重新实现了Kafka connect模块。


阿里云消息队列 Kafka Connect 解决方案


阿里云消息队列Kafka Connect框架介绍

架构设计将控制面和运行面分开,通过数据库和Etcd进行任务分发和模块通信。底层运行环境采用K8S集群,更好的控制了资源的粒度和隔离程度,整体架构图如下:

image.png

该架构在很好的解决了Apache Kafka Connect模块在云上遇到的问题:

  • 与云服务的对接:运行环境部署时默认网络打通,运行面打通了访问控制模块;
  • 占用Kafka集群资源:元信息采用数据库和Etcd存储,不占用Kafka topic资源;
  • 运维管控接口增强:增强了资源层面的管控Api,可以精细化的控制每个任务的运行资源;
  • 监控指标增强:任务维度全链路运行时metrics收集,监控数据从流入到流出的不同阶段的运行情况,出现问题是及时定位问题;
  • 云原生架构设计:控制面统筹全局资源,实时监测集群负载,并能够自动完成负载均衡,失败重启,异常漂移等运维操作;


阿里云Kafka Connect介绍

阿里云消息队列Kafka已经支持的Connector类型如下:

image.png

涵盖了数据库,数据仓库,数据检索和报表,告警系统,备份需求这些主流的使用场景。

根据不同场景的实际需求,阿里云消息队列Kafka Connect主要两种实现方式:


1. 通过扩展Kafka Connect框架,完成外部系统与Kafka的直接对接。

2. 对于需要数据处理的任务类型,通过Kafka->函数计算(下简称fc)->外部系统的,在fc上可以灵活的定制化处理逻辑。


具体connect的实现方式如下:

数据库

数据库之间备份一般不会走kafka,msyql->kafka一般都是为了将数据分发给下游订阅,在mysql数据有变更时作出告警或这其他响应,链路mysql->kafka->订阅程序->告警/变更其他系统。

数据仓库

数据仓库阿里云上常用的是maxCompute,任务特点是吞吐量大,也有数据清洗需求,一般流程为kafka->maxCompute,然后maxCompute内部任务进行数据转换。也可以在入maxCompute之前进行数据清洗,链路一般为kafka->flink->maxCompute。对于数据转换简单或者数据量小的任务,可以使用函数计算替换flink,链路为kafka->fc->maxCompute。

数据检索和报表

通用的数据检索和报表一般通过es,数据传入es前需要做清洗处理,适合的路径kafka->flink->es/kafka->fc->es。

告警系统

告警系统中使用kafka一般流程 前置模块->kafka->订阅程序->告警模块,这种最好的方式是 前置模块->kafka->fc->告警。

备份需求

有些数据可能需要定期归档,做长期保存,oss是一个不错的介质,这种场景一般只需要保存原属数据,所以好的方式可能是kafka->oss。如果数据需要处理,可以通过Kafka->fc->oss链路。


阿里云消息队列 Kafka 生态规划


消息队列Kafka当前支持的connect都采用自研新架构独立开发,对于主流的使用场景已经有了不错的覆盖,但同时也可以看到,Kafka生态发展非常迅猛,Kafka的使用场景也越来越多,开源Kafka connect也在不断的发展,下一步消息队列Kafka会对接开源Kafka connect,让开源Kakfa connect可以无需修改,无缝的运行在自研的架构上。


总结


Kafka在互联网架构中已经占据了重要的位置,同时也在积极往上下游拓展,除了Kafka connect,还有Kafka Streams,Ksql,Kafka Rest Proxy等模块也在不断完善和成熟,相信在后续的发展中,Kafka在软件架构中会扮演越来越多的重要角色。


点击此处,进官网了解更多详情

相关文章
|
3天前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
42 2
|
3天前
|
安全 Devops 测试技术
深入了解阿里云云效DevOps:构建高效软件开发实践
阿里云云效DevOps,集成CI/CD与自动化测试,提升开发效率。支持持续集成确保代码质量,自动化测试加速交付,多环境及灰度发布保障安全可靠性。助团队构建高效开发实践,增强竞争力。
18 1
|
3天前
|
Cloud Native 关系型数据库 分布式数据库
数据库性能诊断工具DBdoctor通过阿里云PolarDB产品生态集成认证
DBdoctor(V3.1.0)成功通过阿里云PolarDB分布式版(V2.3)集成认证,展现优秀兼容性和稳定性。此工具是聚好看科技的内核级数据库性能诊断产品,运用eBPF技术诊断SQL执行,提供智能巡检、根因分析和优化建议。最新版V3.1.1增加了对PolarDB-X和OceanBase的支持,以及基于cost的索引诊断功能。PolarDB-X是阿里巴巴的高性能云原生分布式数据库,兼容MySQL生态。用户可通过提供的下载地址、在线试用链接和部署指南体验DBdoctor。
150 0
|
3天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
3天前
|
消息中间件 存储 传感器
Kafka消息队列原理及应用详解
【5月更文挑战第6天】Apache Kafka是高性能的分布式消息队列,常用于实时数据管道和流应用。它提供高性能、持久化、分布式和可伸缩的消息处理,支持解耦、异步通信和流量控制。Kafka的核心概念包括Broker、Topic、Partition、Producer、Consumer和Consumer Group。其特点是高吞吐、低延迟、数据持久化、分布式架构和容错性。常见应用包括实时数据流处理、日志收集、消息传递和系统间数据交换。
|
3天前
|
测试技术 块存储 开发者
阿里云块存储团队软件工程实践
本文介绍了阿里云团队软件工程实际开发流程,并简述了开发过程中遇到的一些问题。且附带案例,以及遇到案例中出现的情况应当如何应对。
|
3天前
|
存储 JSON 前端开发
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
21 0
|
3天前
|
消息中间件 存储 Java
深度探索:使用Apache Kafka构建高效Java消息队列处理系统
【4月更文挑战第17天】本文介绍了在Java环境下使用Apache Kafka进行消息队列处理的方法。Kafka是一个分布式流处理平台,采用发布/订阅模型,支持高效的消息生产和消费。文章详细讲解了Kafka的核心概念,包括主题、生产者和消费者,以及消息的存储和消费流程。此外,还展示了Java代码示例,说明如何创建生产者和消费者。最后,讨论了在高并发场景下的优化策略,如分区、消息压缩和批处理。通过理解和应用这些策略,可以构建高性能的消息系统。
|
3天前
|
SQL 运维 DataWorks
Flink CDC在阿里云DataWorks数据集成应用实践
本文整理自阿里云 DataWorks 数据集成团队的高级技术专家 王明亚(云时)老师在 Flink Forward Asia 2023 中数据集成专场的分享。
546 2
Flink CDC在阿里云DataWorks数据集成应用实践
|
3天前
|
消息中间件 安全 Kafka
2024年了,如何更好的搭建Kafka集群?
我们基于Kraft模式和Docker Compose同时采用最新版Kafka v3.6.1来搭建集群。
513 2
2024年了,如何更好的搭建Kafka集群?

热门文章

最新文章

相关产品

  • 云消息队列 Kafka 版