阿里云消息队列 Kafka 生态集成的实践与探索
Aliware Apache Kafka是一个分布式流平台,作为互联网领域不可或缺的消息组件,在全球获得了广泛的应用。在使用过程中,Kafka一般被作为消息流转的核心枢纽,上下游系统通过Kafka实现异步,削峰填谷。在大数据处理和实时数据处理领域Kafka也是不可替代的组件。 Kafka使用非常广泛,在有些领域使用已经非常成熟,如日志收集,大数据处理,数据库等领域。Kafka跟上下游也有标准化的对接模块,如日志收集有Flume,Filebeat,Logstash,大数据处理有spark,flink等组件。同时在一些小众的领域则没有现成的工具可以直接对接,如对接某个小众的数据库,或者用户自己定制化的系统。这时一般的对接方法是自行开发Kafka生产消费程序对接。 在不同系统对接时通常会遇到以下问题:
- 公司的不同团队对同一个系统有对接需求,各自开发重复造轮子,且实现方式不一,升级运维成本高。
- 各子系统由不同的团队开发,因此,各系统中的数据在内容和格式上,存在天然的不一致性,需要进行格式处理,以消除各系统数据之间格式的不同。
Aliware Kafka Connect是一个用于将数据流输入和输出Kafka的框架。下面介绍connector的一些主要概念:
- Connectors:通过管理task来协调数据流的高级抽象
- Tasks:如何将数据复制到Kafka或从Kafka复制数据的实现
- Workers:执行Connector和Task的运行进程
- Converters:用于在Connect和外部系统发送或接收数据之间转换数据的代码
- Transforms:更改由连接器生成或发送到连接器的每个消息的简单逻辑
- AvroConverter:与Schema Registry一起使用;
- JsonConverter:适合结构数据;
- StringConverter:简单的字符串格式;
- ByteArrayConverter:提供不进行转换的“传递”选项;
Aliware Kafka connect线下单独部署时,设计的很不错了,但作为一个云服务提供时,还是存在了不少的问题,主要体现在以下几点:
- 与云服务的集成度不好:云厂商有不少闭源产品,对于开源产品的云托管版也会有访问控制等问题。
- 占用Kafka集群资源:每个connector任务都需要三个内置元信息topic,占用云产品资源,对于元信息topic的误操作也会导致任务异常。
- 运维管控接口和监控简单:管控接口没法控制运行资源粒度,监控缺少connector任务维度的指标。
- 与云原生架构结合不好:架构初始设计并非云原生,任务之间隔离度不够,负载均衡算法简单,没有动态自平衡能力。
Aliware 阿里云消息队列Kafka Connect框架介绍 架构设计将控制面和运行面分开,通过数据库和Etcd进行任务分发和模块通信。底层运行环境采用K8S集群,更好的控制了资源的粒度和隔离程度,整体架构图如下:
- 与云服务的对接:运行环境部署时默认网络打通,运行面打通了访问控制模块;
- 占用Kafka集群资源:元信息采用数据库和Etcd存储,不占用Kafka topic资源;
- 运维管控接口增强:增强了资源层面的管控Api,可以精细化的控制每个任务的运行资源;
- 监控指标增强:任务维度全链路运行时metrics收集,监控数据从流入到流出的不同阶段的运行情况,出现问题是及时定位问题;
- 云原生架构设计:控制面统筹全局资源,实时监测集群负载,并能够自动完成负载均衡,失败重启,异常漂移等运维操作;
Aliware 消息队列Kafka当前支持的connect都采用自研新架构独立开发,对于主流的使用场景已经有了不错的覆盖,但同时也可以看到,Kafka生态发展非常迅猛,Kafka的使用场景也越来越多,开源Kafka connect也在不断的发展,下一步消息队列Kafka会对接开源Kafka connect,让开源Kakfa connect可以无需修改,无缝的运行在自研的架构上。 总结
Aliware Kafka在互联网架构中已经占据了重要的位置,同时也在积极往上下游拓展,除了Kafka connect,还有Kafka Streams,Ksql,Kafka Rest Proxy等模块也在不断完善和成熟,相信在后续的发展中,Kafka在软件架构中会扮演越来越多的重要角色。 点击阅读原文,进官网了解更多详情