Skip to main content

1.9.0 版本发布

· One min read

Apache InLong(应龙) 最近发布了 1.9.0 版本,该版本关闭了约 200+ 个issue,包含 2+ 个大特性和 30+ 个优化,主要完成了可观测性能力建设、优化DataProxySDK-CPP等。1.9.0 发布后,Apache InLong 在全链路跟踪、指标采集、接入及可视化观测、告警方面补齐了可观测能力建设,解决在开发和运营过程中的快速排查问题、性能优化等需求,优化Apache InLong运营运维的使用体验。

关于 Apache InLong

作为业界首个一站式、全场景海量数据集成框架,Apache InLong(应龙) 提供了自动、安全、可靠和高性能的数据传输能力,方便业务快速构建基于流式的数据分析、建模和应用。目前 InLong 正广泛应用于广告、支付、社交、游戏、人工智能等各个行业领域,服务上千个业务,其中高性能场景数据规模超百万亿条/天,高可靠场景数据规模超十万亿条/天。

InLong 项目定位的核心关键词是“一站式”、“全场景”和“海量数据”。对于“一站式”,我们希望屏蔽技术细节、提供完整数据集成及配套服务,实现开箱即用;对于“全场景”,我们希望提供全方位的解决方案,覆盖大数据领域常见的数据集成场景;对于“海量数据”,我们希望通过架构上的数据链路分层、全组件可扩展、自带多集群管理等优势,在百万亿条/天的基础上,稳定支持更大规模的数据量。

1.9.0 版本总览

Apache InLong(应龙) 最近发布了 1.9.0 版本,该版本关闭了约 200+ 个 issue ,包含 5+ 个大特性和 30+ 个优化,主要完成了可观测性能力建设、优化 DataProxy C++ SDK、DataProxy 元数据配置更新优化、TubeMQ 增加命令行工具、Iceberg 自动切换写入方式、Manager 支持资源在租户间迁移等。1.9.0 发布后,Apache InLong 在全链路跟踪、指标采集、接入及可视化观测、告警方面补齐了可观测能力建设,解决在开发和运营过程中的快速排查问题、性能优化等需求,同时优化 Apache InLong 运营运维的使用体验。

Apache InLong 1.9.0 版本中,还完成了大量其它特性,主要包括:

Agent 模块

  • 支持全链路日志跟踪上报,提升可观测性能力
  • 移除 TaskManager 初始化时的指标上报注销逻辑
  • 移除设置黑名单的容量限制
  • 优化 Agent 的 JVM 参数

DataProxy 模块

  • 优化元数据更新逻辑;
  • 优化DataProxy指标统计
  • 优化发送失败后的重发逻辑

Sort 模块

  • 数据同步支持审计指标上报
  • Iceberg 支持动态切换 append 和 upsert 模式
  • 数据写入 Kafka 时支持根据定制化字段写入不同分区
  • PostgreSQL 支持多并发读取
  • Doris 写入支持 Schema 自动变更

Manager 模块

  • 支持全链路日志跟踪上报,提升可观测性能力
  • 支持 Tencent CLS、Pulsar 集群、Iceberg 、StartRocks 等数据目标
  • 在 Flink 1.15上支持 Iceberg 、StarRocks 作为数据源
  • 完善多租户能力:包括删除租户前支持校验租户状态、OpenAPI 支持租户参数、数据源支持多租户配置等
  • ManagerClient 支持分页查询数据流的 Source 和 Sink 资源

Dashboard 模块

  • 支持 Pulsar 数据集群的管理,并支持接出 Pulsar 接出
  • 优化租户的权限查询性能
  • 优化界面展现的易用性

Audit模块

  • 添加 audit_tag 信息以区分数据源和数据目标
  • 优化审计 Proxy 的日志输出

SDK模块

  • 优化 DataProxy C++ SDK,提升性能和网络不稳定时的可靠性
  • Sort SDK 支持并行创建缓存层消费
  • 优化 DataProxy Java SDK 的失败重试策略,以及缓存池和异步发送逻辑

TubeMQ模块

  • 增加 TubeMQ 命令行工具
  • TubeMQ Manager 增加 restart 脚本

其它

  • 增加 ASF DOAP 文件
  • 增加 MySQL Connector 管理镜像
  • 优化第三方依赖,解决安全风险

1.9.0 版本特性介绍

可观测性能力建设

在 Apache InLong 的应用过程中,经常遇到如下场景需求:

  • 通过详细的链路调用数据定位到出现问题的代码 ( Tracing )
  • 对异常模块以及关联日志进行查询分析,找到核心的报错信息 ( Logs )
  • 打开监控大盘查找异常现象,并通过查询找到异常模块( Metrics )
  • 通过各式各样预设报警发现异常( Metrics/Logs )

在 1.9.0 版本中,@ZhaoNiuniu 基于 OpenTelemetry 完整贡献了 InLong 的可观测性能力建设。OpenTelemetry 提供了灵活、方便和丰富的 Span 定制能力,如添加自定义属性、添加事件等,只需在代码中核心位置进行埋点,就能展示在后端 UI 统一展示 。整个方案主要包括以下几个步骤:

  • 应用将埋点采集的 Trace、Log、Metric 数据通过 otlp-exporter push 到 otel collector;
  • Otel Collector 将数据收集、转换后,导出到 Jaeger 、Prometheus 、Elasticsearch ;
  • Grafana 配置三方数据源,统一展示、查询、监控、告警;

1.9.0-observability.png

感谢 @ZhaoNiuniu 的贡献,详情可见 INLONG-8611 和 INLONG-8799 。

DataProxy C++ SDK 优化

老版本 DataProxy C++ SDK 基于 C 语言开发,扩展受限,采用单例模式导致性能受限,对于发送失败场景处理不合理,容易触发 coredump 。因此对 SDK 进行了优化,优化点如下:

  • 采用 C++ 的开发模式,重构 DataProxy C++ SDK,不用再受C语言限制,增强了代码的扩展性;
  • 单进程支持多 SDK 实例,支持通过增加 SDK 实例进行水平扩容,突破性能上限;
  • 数据接收与数据发送进行解耦,可按配置分别增加接收和发送的线程数,提高了 SDK 的可扩展性;
  • 将 SDK 数据打包逻辑与业务线程进行解耦,一方面减少了对业务线程的影响,另一方面提高了打包的性能;
  • 从根源上解决了老版本 SDK 发送失败导致 coredump 的问题。

1.9.0-dataproxycplussdk.png

感谢 @doleyzi 的完整贡献,详情可见 INLONG-8747 。

DataProxy 元数据配置更新优化

DataProxy 从 Manager 获取元数据配置,有时会因为网络、误操作等原因,导致 DataProxy 从 Manager 拿到错误的元数据配置,1.9.0 版本 DataProxy 增加了元数据配置更新的保护机制,提升 Apache InLong 在极端场景下的可靠性。感谢 @gosonzhang 的贡献,详情可见 INLONG-8758 和 INLONG-8899 。元数据配置更新的保护机制逻辑如下:

1.9.0-dataproxymetadataupdate.png

TubeMQ 增加命令行工具

为了在服务器管理和 DevOps 场景下,Apache InLong 运维人员可以简单、快速、灵活地在终端窗口中执行各种操作。TubeMQ 提供命令行工具通过命令行参数或选项来管理主题,生产和消费消息,以及管理消费者组。感谢 @fancycoderzf 的贡献,详情可见 INLONG-4972 。详细使用文档,可以参考 TubeMQ Command-line Tools ,主要功能包括:

$ bin/tubectl [options] [command] [command options]
$ bin/tubectl topic -h
$ bin/tubectl message produce
$ bin/tubectl message consume
$ bin/tubectl cgroup list

Iceberg 自动切换写入方式

目前实时同步 MySQL-> Iceberg 链路全量阶段默认为 upsert 模式,而 upsert 在 Iceberg 中的实现为先 delete 后 add, delete 操作表现为新增 delete 文件,全量阶段会有大量的 delete 文件产生,严重影响了查询的效率。本次优化使得任务能在全量阶段使用 Append 写入,在增量阶段能够自动转为 Upsert 写入。 实现方式源端在数据中携带元数据字段来决定 Iceberg writer 中使用何种方式写入,切换写入方式时会进行数据的刷新,实际写入时去除掉了元数据字段。感谢 @lordcheng10 和 @Emsnap 的贡献。

1.9.0-icebergswitch.png

Manager 支持资源在租户间迁移

InLong 支持多租户后,从旧版本升级上来的 InLong Group 都将被定义在 public 租户下, 用户新建的 InLong Group 则定义在其名下的租户内。这就导致用户需要频繁在多个租户之间切换来使用资源。 本次优化支持 InLong Group 在不同租户之间进行迁移,同时校验并自动创建对应的集群标签, 数据节点等资源。 感谢 @vernedeng 的贡献

1.9.0-managertenant.png

后续规划

在 1.9.0 版本中,社区还重构 DataProxy C++ SDK ,丰富 Flink 1.15 Connector ,完善数据同步功能等特性。 在后续的版本中,InLong 将继续丰富 Flink 1.15 Connector 、增强数据同步的调度能力、完善 Agent 文件采集能力等,期待更多开发者参与贡献。