作者:尘辉

音讯行列 Kafka 简介

Apache Kafka是一个分布式流平台,作为互联网范畴不可或缺的音讯组件,在全球获得了广泛的运用。在运用过程中,Kafka一般被作为音讯流转的核心纽带,上下流体系经过Kafka完结异步,削峰填谷。在大数据处理和实时数据处理范畴Kafka也是不可替代的组件。

Kafka运用十分广泛,在有些范畴运用已经十分成熟,如日志搜集,大数据处理,数据库等范畴。Kafka跟上下流也有标准化的对接模块,如日志搜集有Flume,Filebeat,Logstash,大数据处理有spark,flink等组件。一同在一些小众的范畴则没有现成的东西能够直接对接,如对接某个小众的数据库,或许用户自己定制化的体系。这时一般的对接方法是自行开发Kafka生产消费程序对接。

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

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

根据Kafka运用的广泛度和上下流体系的多样性考虑,Kafka推出了内置的上下流体系对接结构Kafka Connect。

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

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插件,编写流程一般如下:

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

Tasks

Task是Connect数据模型中的首要处理数据的人物。每个connector实例和谐一组实际仿制数据的task。经过答应connector将单个作业分解为多个task,Kafka Connect供给了内置的对并行性和可弹性数据仿制的支撑,只需很少的装备。这些使命没有存储任何状况。使命状况存储在Kafka中的特殊主题config.storage.topic和status.storage.topic中。因而,能够在任何时候启动、停止或从头启动使命,以供给弹性的、可弹性的数据管道。

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

Task再平衡

当connector首次提交到集群时,workers会从头平衡集群中的一切connector及其tasks,以便每个worker的工作量大致相同。当connector增加或减少它们所需的task数量,或许更改connector的装备时,也会运用相同的从头平衡过程。当一个worker失利时,task在活动的worker之间从头平衡。当一个task失利时,不会触发再平衡,由于task失利被认为是一个例外情况。因而,失利的task不会被结构主动从头启动,应该经过REST API从头启动。

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

Converters

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

默许供给以下converters:

  • AvroConverter:与Schema Registry一同运用;
  • JsonConverter:合适结构数据;
  • StringConverter:简略的字符串格式;
  • ByteArrayConverter:供给不进行转化的“传递”选项;

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

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

Transforms

Connector能够装备转化,以便对单个音讯进行简略且轻量的修改。这关于小数据的调整和事件路由十分便利,且能够在connector装备中将多个转化链接在一同。

开源问题

Kafka connect线下独自布置时,规划的很不错了,但作为一个云服务供给时,仍是存在了不少的问题,首要体现在以下几点:

  • 与云服务的集成度欠好:云厂商有不少闭源产品,关于开源产品的云保管版也会有拜访操控等问题。
  • 占用Kafka集群资源:每个connector使命都需求三个内置元信息topic,占用云产品资源,关于元信息topic的误操作也会导致使命反常。
  • 运维管控接口和监控简略:管控接口没法操控运转资源粒度,监控短少connector使命维度的目标。
  • 与云原生架构结合欠好:架构初始规划并非云原生,使命之间阻隔度不够,负载均衡算法简略,没有动态自平衡能力。

根据Kafka connect布置在云上的种种问题,音讯行列Kafka团队在兼容原生kafka connect结构的前提下,以云原生的方法从头完结了Kafka connect模块。

阿里云音讯行列 Kafka Connect 处理方案

阿里云音讯行列Kafka Connect结构介绍

架构规划将操控面和运转面分隔,经过数据库和Etcd进行使命分发和模块通讯。底层运转环境选用K8S集群,更好的操控了资源的粒度和阻隔程度,全体架构图如下:

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

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

  • 与云服务的对接:运转环境布置时默许网络打通,运转面打通了拜访操控模块;
  • 占用Kafka集群资源:元信息选用数据库和Etcd存储,不占用Kafka topic资源;
  • 运维管控接口增强:增强了资源层面的管控Api,能够精细化的操控每个使命的运转资源;
  • 监控目标增强:使命维度全链路运转时metrics搜集,监控数据从流入到流出的不同阶段的运转情况,出现问题是及时定位问题;
  • 云原生架构规划:操控面统筹大局资源,实时监测集群负载,并能够主动完结负载均衡,失利重启,反常漂移等运维操作;

阿里云Kafka Connect介绍

阿里云音讯行列Kafka已经支撑的Connector类型如下:

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

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

根据不同场景的实际需求,阿里云音讯行列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在软件架构中会扮演越来越多的重要人物。

点击此处,进官网了解更多概况