作者:尘辉
音讯行列 Kafka 简介
Apache Kafka是一个分布式流平台,作为互联网范畴不可或缺的音讯组件,在全球获得了广泛的运用。在运用过程中,Kafka一般被作为音讯流转的核心纽带,上下流体系经过Kafka完结异步,削峰填谷。在大数据处理和实时数据处理范畴Kafka也是不可替代的组件。
Kafka运用十分广泛,在有些范畴运用已经十分成熟,如日志搜集,大数据处理,数据库等范畴。Kafka跟上下流也有标准化的对接模块,如日志搜集有Flume,Filebeat,Logstash,大数据处理有spark,flink等组件。一同在一些小众的范畴则没有现成的东西能够直接对接,如对接某个小众的数据库,或许用户自己定制化的体系。这时一般的对接方法是自行开发Kafka生产消费程序对接。
在不同体系对接时通常会遇到以下问题:
- 公司的不同团队对同一个体系有对接需求,各自开发重复造轮子,且完结方法纷歧,升级运维成本高。
- 各子体系由不同的团队开发,因而,各体系中的数据在内容和格式上,存在天然的纷歧致性,需求进行格式处理,以消除各体系数据之间格式的不同。
根据Kafka运用的广泛度和上下流体系的多样性考虑,Kafka推出了内置的上下流体系对接结构Kafka Connect。
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插件,编写流程一般如下:
Tasks
Task是Connect数据模型中的首要处理数据的人物。每个connector实例和谐一组实际仿制数据的task。经过答应connector将单个作业分解为多个task,Kafka Connect供给了内置的对并行性和可弹性数据仿制的支撑,只需很少的装备。这些使命没有存储任何状况。使命状况存储在Kafka中的特殊主题config.storage.topic和status.storage.topic中。因而,能够在任何时候启动、停止或从头启动使命,以供给弹性的、可弹性的数据管道。
Task再平衡
当connector首次提交到集群时,workers会从头平衡集群中的一切connector及其tasks,以便每个worker的工作量大致相同。当connector增加或减少它们所需的task数量,或许更改connector的装备时,也会运用相同的从头平衡过程。当一个worker失利时,task在活动的worker之间从头平衡。当一个task失利时,不会触发再平衡,由于task失利被认为是一个例外情况。因而,失利的task不会被结构主动从头启动,应该经过REST API从头启动。
Converters
在向Kafka写入或从Kafka读取数据时,Converter是使Kafka Connect支撑特定数据格式所必需的。task运用转化器将数据格式从字节更改为连接内部数据格式,反之亦然。
默许供给以下converters:
- AvroConverter:与Schema Registry一同运用;
- JsonConverter:合适结构数据;
- StringConverter:简略的字符串格式;
- ByteArrayConverter:供给不进行转化的“传递”选项;
转化器与连接器本身解耦,以便在连接器之间自然地重用转化器。
Transforms
Connector能够装备转化,以便对单个音讯进行简略且轻量的修改。这关于小数据的调整和事件路由十分便利,且能够在connector装备中将多个转化链接在一同。
开源问题
Kafka connect线下独自布置时,规划的很不错了,但作为一个云服务供给时,仍是存在了不少的问题,首要体现在以下几点:
- 与云服务的集成度欠好:云厂商有不少闭源产品,关于开源产品的云保管版也会有拜访操控等问题。
- 占用Kafka集群资源:每个connector使命都需求三个内置元信息topic,占用云产品资源,关于元信息topic的误操作也会导致使命反常。
- 运维管控接口和监控简略:管控接口没法操控运转资源粒度,监控短少connector使命维度的目标。
- 与云原生架构结合欠好:架构初始规划并非云原生,使命之间阻隔度不够,负载均衡算法简略,没有动态自平衡能力。
根据Kafka connect布置在云上的种种问题,音讯行列Kafka团队在兼容原生kafka connect结构的前提下,以云原生的方法从头完结了Kafka connect模块。
阿里云音讯行列 Kafka Connect 处理方案
阿里云音讯行列Kafka Connect结构介绍
架构规划将操控面和运转面分隔,经过数据库和Etcd进行使命分发和模块通讯。底层运转环境选用K8S集群,更好的操控了资源的粒度和阻隔程度,全体架构图如下:
该架构在很好的处理了Apache Kafka Connect模块在云上遇到的问题:
- 与云服务的对接:运转环境布置时默许网络打通,运转面打通了拜访操控模块;
- 占用Kafka集群资源:元信息选用数据库和Etcd存储,不占用Kafka topic资源;
- 运维管控接口增强:增强了资源层面的管控Api,能够精细化的操控每个使命的运转资源;
- 监控目标增强:使命维度全链路运转时metrics搜集,监控数据从流入到流出的不同阶段的运转情况,出现问题是及时定位问题;
- 云原生架构规划:操控面统筹大局资源,实时监测集群负载,并能够主动完结负载均衡,失利重启,反常漂移等运维操作;
阿里云Kafka Connect介绍
阿里云音讯行列Kafka已经支撑的Connector类型如下:
涵盖了数据库,数据仓库,数据检索和报表,告警体系,备份需求这些主流的运用场景。
根据不同场景的实际需求,阿里云音讯行列Kafka Connect首要两种完结方法:
-
经过扩展Kafka Connect结构,完结外部体系与Kafka的直接对接。
-
关于需求数据处理的使命类型,经过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在软件架构中会扮演越来越多的重要人物。
点击此处,进官网了解更多概况