以下是一份包含各类优秀书籍的 1000 本书单示例,但这只是一个宽泛的推荐,你可以根据自己的兴趣和需求进行选择:

 

1. 文学名著类:

- 中国文学:

- 《红楼梦》曹雪芹:中国古典小说的巅峰之作,以贾、史、王、薛四大家族的兴衰为背景,展现了封建社会的人生百态。


- 《三国演义》罗贯中:描绘了三国时期的政治、军事斗争,塑造了众多鲜明的人物形象。


- 《水浒传》施耐庵、罗贯中:讲述了梁山好汉的故事,反映了当时的社会矛盾和人民的反抗精神。


- 《西游记》吴承恩:充满奇幻色彩的长篇小说,讲述了唐僧师徒四人西天取经的经历。


- 《活着》余华:以平实的文字叙述了主人公福贵悲惨的一生,展现了人性的坚韧和生命的意义。


- 《平凡的世界》路遥:描绘了 20 世纪 70 年代到 80 年代中国农村的变迁,刻画了众多平凡人的奋斗历程。


- 《白鹿原》陈忠实:以陕西关中地区白鹿原上白鹿村为缩影,展现了中国近代农村的历史变迁。


- 《围城》钱钟书:以幽默的笔触讽刺了知识分子的生活和人性的弱点。


- 《呼兰河传》萧红:记录了东北小城呼兰河的风土人情以及作者的童年生活。


- 《狂人日记》鲁迅:中国现代文学史上第一篇白话小说,具有深刻的思想内涵和批判精神。


- 外国文学:

- 《百年孤独》加西亚·马尔克斯:拉丁美洲魔幻现实主义文学的代表作,讲述了布恩迪亚家族七代人的传奇故事。


- 《战争与和平》列夫·托尔斯泰:以 19 世纪俄国历史为背景,展现了战争的残酷和人性的美好。


- 《安娜·卡列尼娜》列夫·托尔斯泰:探讨了爱情、婚姻、家庭等主题,塑造了安娜这一经典的女性形象。


- 《巴黎圣母院》维克多·雨果:通过描写巴黎圣母院副主教克洛德和吉普赛女郎埃斯梅拉达的故事,展现了美与丑、善与恶的对比。


- 《悲惨世界》维克多·雨果:描绘了法国社会的广阔画面,展现了人性的光辉和救赎。


- 《傲慢与偏见》简·奥斯汀:以英国乡绅阶层的日常生活为背景,讲述了伊丽莎白和达西之间的爱情故事。


- 《呼啸山庄》艾米莉·勃朗特:充满激情和复仇的爱情悲剧,具有强烈的艺术感染力。


- 《红与黑》司汤达:反映了法国 19 世纪社会的阶级矛盾和个人奋斗。


- 《高老头》巴尔扎克:揭露了资本主义社会金钱的罪恶和人与人之间的冷漠。


- 《简·爱》夏洛蒂·勃朗特:讲述了简·爱自尊自爱、追求平等爱情的故事。


- 《堂吉诃德》塞万提斯:一部反骑士小说的骑士小说,充满了幽默和讽刺。


- 《罪与罚》陀思妥耶夫斯基:探讨了人性的善恶、道德与法律等问题。


- 《卡拉马佐夫兄弟》陀思妥耶夫斯基:深刻揭示了人性的复杂性和宗教哲学问题。


- 《了不起的盖茨比》弗朗西斯·斯科特·菲茨杰拉德:描绘了美国 20 世纪 20 年代的社会风貌和人们的梦想与幻灭。


- 《老人与海》海明威:通过老渔夫桑迪亚哥与大鱼搏斗的故事,展现了人类的勇气和毅力。


- 《麦田里的守望者》J.D.塞林格:反映了青少年的成长困惑和对社会的不满。


- 《小王子》安托万·德·圣-埃克苏佩里:以儿童的视角探讨了人生的真谛和爱的意义。


2. 哲学思想类:

- 《论语》孔子弟子及再传弟子:记录了孔子及其弟子的言行,是儒家思想的经典著作。


- 《老子》老子:道家思想的代表作,阐述了“道”的概念和无为而治的思想。


- 《庄子》庄子:充满哲学思辨和想象力,表达了道家的逍遥自在的思想。


- 《孟子》孟子:儒家经典之一,强调了人性本善和仁政的思想。


- 《荀子》荀子:主张性恶论,强调通过教育和后天的努力来改变人性。


- 《西方哲学史》罗素:系统地介绍了西方哲学的发展历程,是了解西方哲学的重要读物。


- 《理想国》柏拉图:描绘了一个理想的国家制度,探讨了正义、美德等哲学问题。


- 《沉思录》马可·奥勒留:古罗马皇帝的哲学思考,对人生、道德等问题有深刻的见解。


- 《存在与时间》马丁·海德格尔:对存在主义哲学的重要贡献,探讨了存在的本质和人类的存在方式。


- 《纯粹理性批判》伊曼努尔·康德:对人类理性的批判和反思,是哲学史上的经典之作。


- 《查拉图斯特拉如是说》弗里德里希·尼采:表达了尼采的超人哲学和对传统道德的批判。


3. 历史传记类:

- 中国历史:

- 《史记》司马迁:中国第一部纪传体通史,具有极高的史学价值和文学价值。


- 《资治通鉴》司马光:编年体通史巨著,为后人提供了丰富的历史经验和教训。


- 《三国志》陈寿:记录了三国时期的历史,是了解三国历史的重要文献。


- 《汉书》班固:中国第一部纪传体断代史,对西汉历史的研究具有重要意义。


- 《后汉书》范晔:记载了东汉历史的纪传体史书。


- 《明朝那些事儿》当年明月:以通俗易懂的方式讲述了明朝的历史,深受读者喜爱。


- 《万历十五年》黄仁宇:从独特的视角分析了明朝万历年间的历史事件和社会现象。


- 《曾国藩传》萧一山:全面地介绍了曾国藩的一生,对其政治、军事、文化等方面的成就进行了评价。


- 《苏东坡传》林语堂:生动地描绘了苏轼的人生经历和文学成就。


- 《武则天正传》林语堂:对武则天的一生进行了详细的叙述和评价。


- 世界历史:

- 《全球通史》L.S.斯塔夫里阿诺斯:从全球的角度讲述了人类历史的发展,具有广阔的视野。


- 《人类简史》尤瓦尔·赫拉利:融合多学科知识,探讨了人类的演化和发展。


- 《罗马帝国衰亡史》爱德华·吉本:对罗马帝国的兴衰进行了深入的研究和分析。


- 《法国大革命史》托马斯·卡莱尔:详细地记录了法国大革命的过程和影响。


- 《第三帝国的兴亡》威廉·夏伊勒:对纳粹德国的崛起和灭亡进行了全面的描述。


- 《拿破仑传》埃米尔·路德维希:生动地刻画了拿破仑的一生,展现了他的军事才能和政治抱负。


- 《富兰克林自传》本杰明·富兰克林:美国开国元勋的自传,记录了他的成长经历和思想观念。


- 《甘地自传》莫罕达斯·卡拉姆昌德·甘地:讲述了甘地的非暴力抵抗运动和他的人生哲学。


- 《乔布斯传》沃尔特·艾萨克森:记录了苹果公司创始人乔布斯的传奇人生。


- 《爱因斯坦传》沃尔特·艾萨克森:介绍了爱因斯坦的科学成就和人生经历。


4. 科学技术类:

- 《时间简史》斯蒂芬·霍金:介绍了宇宙的起源、黑洞、时间旅行等宇宙学前沿知识。


- 《万物简史》比尔·布莱森:以通俗易懂的方式讲述了科学的发展历程和科学知识。


- 《物种起源》查尔斯·达尔文:提出了生物进化论,对生物学的发展产生了深远的影响。


- 《梦的解析》西格蒙德·弗洛伊德:对人类的梦境进行了深入的分析,是精神分析学的经典著作。


- 《几何原本》欧几里得:古希腊数学的经典著作,对几何学的发展具有重要意义。


- 《自然哲学的数学原理》艾萨克·牛顿:阐述了牛顿力学的基本原理,是物理学的经典著作。


- 《相对论》阿尔伯特·爱因斯坦:包括狭义相对论和广义相对论,改变了人们对时空的认识。


- 《电磁通论》詹姆斯·克拉克·麦克斯韦:系统地阐述了电磁理论,是电磁学的重要著作。


- 《控制论》诺伯特·维纳:对控制论的基本概念和方法进行了阐述,对现代科学技术的发展产生了重要影响。


- 《从一到无穷大》乔治·伽莫夫:介绍了数学、物理学、生物学等领域的知识,具有启发性。


- 《寂静的春天》蕾切尔·卡森:引发了人们对环境保护的关注,是环保运动的经典之作。


5. 社会科学类:

- 《资本论》卡尔·马克思:分析了资本主义的经济制度,揭示了资本主义的本质和发展规律。


- 《国富论》亚当·斯密:奠定了现代经济学的基础,提出了自由市场经济的理论。


- 《社会契约论》让-雅克·卢梭:探讨了国家的起源、政治制度等问题,对现代政治思想产生了重要影响。


- 《乌合之众:大众心理研究》古斯塔夫·勒庞:分析了群体的心理和行为,对社会心理学的发展具有重要意义。


- 《自卑与超越》阿尔弗雷德·阿德勒:探讨了自卑心理的形成和克服方法,以及个体与社会的关系。


- 《枪炮、病菌与钢铁》贾雷德·戴蒙德:从地理环境的角度分析了人类社会的发展差异。


- 《人类行为的经济学分析》加里·贝克尔:将经济学的分析方法应用于人类行为的研究。


- 《新教伦理与资本主义精神》马克斯·韦伯:探讨了宗教信仰与资本主义发展的关系。


- 《疯癫与文明》米歇尔·福柯:对疯癫的历史和文化进行了研究,揭示了权力与知识的关系。


- 《第二性》西蒙娜·德·波伏娃:探讨了女性的地位和性别角色,是女性主义的经典著作。


6. 艺术文学类:

- 《艺术的故事》贡布里希:系统地介绍了艺术的发展历程,是艺术史的经典著作。


- 《美学散步》宗白华:对中国美学的理论和实践进行了深入的探讨。


- 《西方美学史》朱光潜:系统地介绍了西方美学的发展历程。


- 《中国书法史》刘涛:全面地介绍了中国书法的发展历程和不同时期的书法风格。


- 《人间词话》王国维:对中国古代诗词的审美和批评进行了深入的探讨。


- 《文心雕龙》刘勰:中国古代文学理论的经典著作,对文学创作和批评具有重要的指导意义。


- 《莎士比亚全集》威廉·莎士比亚:包括戏剧、诗歌等作品,是英国文学的瑰宝。


- 《托尔斯泰小说全集》列夫·托尔斯泰:收录了托尔斯泰的所有小说作品,展现了他的文学成就。


- 《巴尔扎克小说全集》巴尔扎克:法国现实主义文学的代表作品,反映了社会的种种问题。


- 《鲁迅杂文全集》鲁迅:鲁迅的杂文具有深刻的思想内涵和强烈的批判精神。


7. 励志成长类:

- 《少有人走的路》M·斯科特·派克:帮助人们理解人生的苦难和成长的意义。


- 《了不起的盖茨比》弗朗西斯·斯科特·菲茨杰拉德:通过主人公的经历,鼓励人们追求梦想。


- 《你当像鸟飞往你的山》塔拉·韦斯特弗:讲述了作者通过学习和自我觉醒,摆脱原生家庭束缚的故事。


- 《刻意练习:如何从新手到大师》安德斯·埃里克森、罗伯特·普尔:介绍了刻意练习的方法,帮助人们提高技能。


- 《终身成长》卡罗尔·德韦克:探讨了固定型思维和成长型思维的区别,鼓励人们培养成长型思维。


- 《逆商:我们该如何应对坏事件》保罗·史托兹:介绍了逆商的概念和提高逆商的方法,帮助人们应对挫折。


- 《坚毅:释放激情与坚持的力量》安杰拉·达克沃思:探讨了坚毅的品质对成功的重要性。


- 《自卑与超越》阿尔弗雷德·阿德勒:帮助人们认识自卑心理,通过努力实现自我超越。


- 《影响力》罗伯特·西奥迪尼:介绍了影响他人的方法和技巧,对人际交往和商业活动具有指导意义。


- 《原则》瑞·达利欧:分享了作者的生活和工作原则,对人们的决策和行为具有启发意义。


8. 儿童文学类:

- 《安徒生童话》安徒生:经典的童话作品,充满了幻想和人性的美好。


- 《格林童话》格林兄弟:收录了众多经典的童话故事,如《白雪公主》《灰姑娘》等。


- 《小王子》安托万·德·圣-埃克苏佩里:不仅适合儿童阅读,也深受成年人的喜爱,传达了关于爱和人生的真谛。


- 《夏洛的网》E.B.怀特:讲述了小猪威尔伯和蜘蛛夏洛之间的友谊,充满了温情。


- 《彼得·潘》詹姆斯·马修·巴利:描绘了永远不会长大的彼得·潘和他在永无岛的冒险故事。


- 《绿野仙踪》莱曼·弗兰克·鲍姆:讲述了小女孩多萝西在奥兹国的冒险经历,鼓励人们勇敢面对困难。


- 《爱的教育》亚米契斯:以日记的形式讲述了小学生安利柯的成长故事,充满了爱和教育的意义。


- 《柳林风声》肯尼斯·格雷厄姆:以动物为主角,描绘了英国乡村的生活和自然风光。


- 《秘密花园》弗朗西丝·霍奇森·伯内特:讲述了三个孩子在秘密花园中的成长故事,充满了对生命的热爱和对自然的赞美。


- 《小王子绘本》:以绘本的形式呈现《小王子》的故事,适合儿童阅读。


企业私有云搭建方案通常包括以下几个关键步骤和考虑因素:


1. **需求分析**:明确企业对私有云的需求,包括业务目标、性能需求、存储需求、安全要求等。


2. **技术选型**:选择合适的硬件、虚拟化技术(如VMware、Hyper-V、KVM)、云管理平台(如OpenStack、CloudStack、vSphere)。


3. **架构设计**:设计私有云的架构,包括服务器布局、存储架构、网络设计等。


4. **部署实施**:根据设计的架构部署硬件、安装虚拟化软件和云管理平台。


5. **测试和优化**:进行全面的测试,确保系统性能和稳定性,并根据测试结果进行优化。


6. **安全措施**:实施防火墙、数据加密、访问控制等安全措施。


7. **维护和升级**:定期进行软件更新、硬件维护和性能监控。


8. **成本评估**:评估私有云建设的初始投资和长期运营成本,确保成本效益。


9. **合规性考虑**:确保私有云建设符合行业法规和数据保护要求。


10. **自动化与标准化**:实现自动化操作和标准化流程,提高运维效率。


11. **灾难恢复与备份**:制定灾难恢复计划和数据备份策略,确保业务连续性。


企业在选择私有云搭建方案时,需要根据自身的业务特点、技术能力、资金投入和业务效果等因素进行综合考虑。私有云的建设是一个长期且持续的过程,需要在实践中不断摸索和优化。


人工智能 (AI) 正迅速改变我们的世界,从智能助手到自动驾驶汽车,AI 的应用无处不在。对开发者而言,快速构建功能强大的 AI 应用是一个挑战。LangChain 作为一款流行的 AI 开发框架,虽然因其丰富的预制组件而广受欢迎,但由于其抽象再抽象、封装再封装,灵活性非常低,且框架的学习、理解及复杂业务逻辑调试的成本很高,使其难以大规模应用于企业业务线上部署。随着 AI 领域的快速发展,微软开源的 Semantic Kernel 框架应运而生,其独特的优势和强大功能可能使其成为 LangChain 的强力替代品。

经过笔者亲子踩坑,将在本文探讨 Semantic Kernel 的核心特点和优势,提供快速入门实践指导,并与 LangChain 的局限性进行比较,旨在帮助开发者选择并入门这个企业级 AI 应用开发框架。

1、什么是 Semantic Kernel

Semantic kernel是微软开源的一个轻量级的开源开发套件,它让你可以轻松构建 AI Agent,并将最新的 AI 模型集成到您的 C#、Python 或 Java 代码库中;它提供了一个简单易用的 API,可以连接到各种 AI 服务,例如 OpenAI、Azure OpenAI 和 Hugging Face 等;并且它作为业高效的中间件,能够快速交付企级解决方案。


semantic_kernel


1.1、核心特性:

  • Kernel:依赖管理容器,管理所有运行AI 应用所需的服务(Services)和插件(Plugins)。

  • Agent:提供了构建任何类型的 Agent(ChatBot、Copilot、Autonomous)的能力。

  • AI Service:支持主流 AI 服务 OpenAI、Azure OpenAI 和 Hugging Face 等便捷接入。

  • Plugin:一类工具的集合。可便捷实现复杂功能,包括本地代码插件、OpenAPI接口插件等。

  • Planning:将函数调用作为规划(plan)和执行(execute)任务的主要方式。

  • Persona:通设置 System Prompt 实现设定的,而且实现方式也非常的方便。

插件(Plugin)是 Semantic Kernel 的一大特色

1.2、优势

  1. 企业级:Semantic Kernel 为微软及其他500强公司提供了灵活、模块化的 AI 解决方案。并且可以轻松扩展以支持语音和视频等其他模式;在安全与可观察性方面,该框架具备先进的安全性增强功能,包括遥测支持、钩子和过滤器,确保您可以安全地部署大规模的AI解决方案。

  2. 自动化业务流程:Semantic Kernel 可以将A I Prompts 与现有API结合,自动执行业务操作。它作为中间件,将AI模型的请求转换为函数调用(Function Call),并处理其结果。

  3. 高度可扩展:你可以通过添加现有代码作为插件,利用一系列现成的连接器来集成AI服务。它还使用OpenAPI规范,便于与团队中的其他开发人员共享和扩展。

  4. 多语言支持:兼容 C#、Python 和 Java,适合各种技术背景的开发者。

  5. 面向未来设计:Semantic Kernel 设计前瞻,能够随着技术进步轻松连接最新的AI模型。新模型推出时,可以简单地进行替换,无需重写整个代码库。

2、Semantic Kernel 的核心特性

2.1、Kernel is All You Need

Kernel 是 Semantic Kernel 的核心组件。简单来说,Kernel是一个依赖管理容器,管理那些运行你的 AI 应用所需的所有服务(Services)和插件(Plugins)。你需要将 AI 应用所有依赖的服务和插件提供给Kernel,在必要的时候 AI 应用会自动使用它们。

组件说明
服务包括所需的 AI 服务(OpenAI)和其他服务(例如日志记录、HTTP 服务等),因此可以支持跨所有语言的服务依赖项引入。
插件是一类工具函数的集合,被 AI 服务用来执行,例如,搜索插件可以包含google搜索、bing搜索等工具


kernel


由于 Kernel 管理着所有服务和插件,因此 Semantic Kernel 的每个组件都基于它来驱动你的 AI 应用。这非常的 Amazing,因为意味着你作为开发者,有个统一的地方可以配置来管理和监控你的 AI 应用。 比如,当你从 Kernel 调用一个 Prompt 时,Kernel会做如下事情: 1. 选择最佳的 AI 服务来运行 Prompt。 2. 使用提供的 Prompt 模板构建 Prompt。 3. 将 Prompt 发送到 AI 服务。 4. 接收并解析响应结果。 5. 最后将来自LLM的响应结果返回给你的应用程序

在这整个过程中,你可以在上述任何步骤中间执行诸如日志记录、向用户提供更新等任何操作,因为这整个过程都在一个地方(Kernel)完成,名副其实的 Kernel is All You Need

在 Semantic Kernel 中定义Kernel十分方便:

# Initialize the kernelkernel = Kernel()

2.2、支持任何类型 Agent 构建

Agent 是基于软件的实体,利用 AI 模型为你完成工作。它们被构建用来执行广泛的任务,并根据它们的工作性质有不同的称呼: - ChatBot:一个被构建用来回答问题的 Agent 称为“ChatBot”,因为它提供了聊天的体验,这些Agent通常依托于自己的数据,比如公司的文档。 - Copilot: 一个被构建来协助你完成工作的 Agent 通常被称为“Copilot”。这些 Agent 通过提供建议帮助你完成任务,如编写电子邮件或创建其他办公文档,你可以选择接受或拒绝这些建议。 - Autonomous:一个被构建来处理重复任务的 Agent 通常被称为“Autonomous”。它可以在不需要干预的情况下响应你的请求并执行操作,它是代替你工作,而不是与你一起工作。

Semantic Kernel 提供了构建任何类型的 Agent 的能力,不需要你是 AI 专家。

在 Semantic Kernel 中,一个 Agent 主要由三个核心构建模块组成:插件(Plugin)、规划器(Planner)和角色(Persona)。

build blocks


2.3、轻松接入 AI 服务

AI 服务是指基于大模型等能力提供的一系列服务,比如ChatGPT等。

Semantic Kernel 的主要功能之一是其能够将不同的AI服务(Services)添加到 Kernel 中,包括 OpenAI、Azure OpenAI 和 Hugging Face 等。这使你可以轻松地替换不同的AI服务,以比较它们的性能,并利用最适合你需求的服务。

比如在接入Azure的GPT-4 Chat服务并添加到 Kernel 的代码如下,是不是非常便捷

# Add Azure OpenAI chat completionkernel.add_service(
    AzureChatCompletion(
      deployment_name="your_models_deployment_name",
      api_key="your_api_key",
      base_url="your_base_url",
    ))

在Semantic Kernel中,有目前最主流的 AI 服务的接口。下表是在不同语言上的支持情况。

服务C#PythonJava
Chat completion
Text generation
Embedding generation (Experimental)
Text-to-image (Experimental)
Image-to-text (Experimental)
Text-to-audio (Experimental)
Audio-to-text (Experimental)

2.4、灵活的插件架构

插件(Plugin)是 Semantic Kernel 的一个关键组成部分。如果你已经使用过 ChatGPT 或 Microsoft 365 中的 Copilot 扩展的插件,那么你就已经对它有所了解。通过插件,可以将现有的 API 封装成一个集合,供 AI 应用使用。这使 AI 应用能够执行它原本无法执行的操作。


plugin<br>s


Semantic Kernel 本质上是在利用函数调用(function calling)功能让 LLM 进行规划(planning)并调用 API。通过函数调用,LLM 可以请求(即调用)特定的函数。Semantic Kernel 随后将请求发送给你定义的合适的函数,并将结果返回给 LLM,以便 LLM 生成最终结果。

在企业业务场景中,插件非常有价值,因为它对一组功能进行了封装,还能很好地与依赖注入配合使用。在插件的构造函数中,可以注入执行插件工作所需的服务(例如,数据库连接、HTTP 客户端等),这在其它不支持插件的架构中难以实现的。

Note
在其它框架中,functions 通常称为“tools”或“actions”。 在 Semantic Kernel 中,仍然使用“functions”来称呼,因为从本质上来看依然是定义在代码中的函数。

下图是一个 Writer 插件示例,里面包含了 ShortPoem 和 StoryGen 等 functions,这些 functions 就是其它框架中的“tools”或“actions”


writer_plungin


在 Semantic Kernel 中定义插件主要有两种方式(在快速实践中会进一步举例说明):使用代码定义 functions 或使用 OpenAPI 规范的 API。通过第一种方式你可以在代码库中编写函数的具体功能和细节,可以利用您已有的依赖和服务。通过第二种方式你可以直接接入 OpenAPI 规范的 API 作为插件,这种方式可以十分方便的跨不同的编程语言和平台共享。

2.5、AI 驱动的插件规划

当 AI 应用拥有多个插件时,就需要一种方法让 AI 应用能够自主的选择合适的一个或多个插件来解决问题,这就需要Planning了。

OpenAI 引入了一种让模型使用函数的原生方法:函数调用(function calling),其他 AI 模型如 Gemini、Claude 和 Mistral 也已采用函数调用作为核心能力。由于这个能力的支持,Semantic Kernel 将函数调用作为规划(plan)和执行(execute)任务的主要方式。

那 Semantic kerenl 是如何知道什么时候该调用什么工具、什么时候调用结束的呢。这其实是通过一个反馈循环来实现的,LLM 会根据用户问请求和插件功能的描述,决定当下需要调用的插件以及具体的函数和参数,Semantic Kernel 会将函数执行结果反馈给 LLM,由 LLM 决定下一步是继续调用插件还是直接回复。

以下就是 Semantic Kernel 基于插件的 AI 驱动的规划过程: 1. 为每个函数创建一个 JSON 格式的函数描述 2. 为 LLM 提供聊天历史记录和上述函数描述 3. 分析 LLM 的响应结果,确定它是回复消息还是调用函数 4. 如果 LLM 想要调用函数,则需要分析 LLM 响应结果中的函数名称和参数 5. 使用正确的参数调用函数 6. 返回函数的结果给 LLM,以便决定它接下来应执行的操作 7. 重复步骤 2-6,直到 LLM 已完成任务

整个反馈循环的过程全部由 Semantic Kernel 支持。规划(planning)什么时候调用调用哪个函数则完全由 LLM 决定,包括函数调用出错 Semantic Kernel 都做了很好的处理,我们只需要定义好插件即可。

2.6、必不可少角色

角色(Persona)通常称为“元提示(Meta Prompt)”或“指令(Instruction)”,用于定义 AI 应用的响应方式或风格。 通过角色的设定,你可以定义 Agent 规划任务、生成回复以及与用户交互的方式和风格。

在Semantic Kernel中,经常将这些 Prompt 描述为“角色”,主要是通设置 System Prompt 实现设定的,而且实现方式也非常的方便。

chat_history = ChatHistory()chat_history.add_system_message("""    You are a technical support specialist for a software company.    Your primary task is to assist users with technical issues,    such as installation problems, software bugs, and feature    inquiries. Use technical jargon appropriately, but ensure that    explanations are easy to understand. If a problem is too complex,    suggest advanced troubleshooting steps or escalate to a higher-level    support team using the escalate tool.""")

定义有效的角色需要仔细考虑 Agent 的目标受众以及 Agent 即将执行的具体任务。以下是一些角色定义的实践建议:

步骤描述
明确目标在创建角色之前,清晰地定义 Agent 需要达成的目标。这包括了解 Agent 将执行的任务以及你期望它与用户的交互方式和风格。
提供示例和场景为了帮助 Agent 更好地理解其角色,提供展示角色行动的示例和场景,比如示例对话、用户故事等,展示 Agent 在不同情况下是如何响应的。
提供备用方案指导 Agent 在遇到未知情况或无法提供回答时应该怎么做。比如包括寻求用户帮助、提供替代解决方案、或直接说明没有明确答案等。
迭代和优化角色设定不是固定不变的,根据用户的反馈和评估情况不断的优化和调整角色设定。

3、放弃LangChain

3.1、LangChain的优缺点

  • LangChain 的优点:

  • LangChain提供了一系列丰富的组件和工具,初期被认为是一个带来便利的产品。

  • 易于集成,使得开发人员理论上能快速地从想法转变为可运行的代码。

  • 在早期阶段,LangChain适合原型制作,可以快速实现对LLM(Large Language Models)的调用和利用。

  • LangChain的缺点:

  • 不灵活性:随着使用需求的复杂化,LangChain的不灵活性显露出来,导致其变成生产力的阻碍而不是源泉。

  • 高度抽象:LangChain的高度抽象使代码难以理解和维护,增加了项目的认知负荷。

  • 抽象层叠:LangChain在其他高级抽象之上叠加了更多的抽象,这增加了调试和理解代码的难度。

  • 框架缺乏灵活性:LangChain的框架设计很难适应快速变化的人工智能和LLM领域,导致难以融入新的概念和想法。

  • 缺乏透明度:由于LangChain的许多底层细节被抽象化,导致技术团队无法轻松编写或调整底层代码。

3.2、选择 Semantic Kernel 放弃 Langchain 的理由

  1. Langchain充满抽象概念,不易于学习和理解。

  2. Langchain不够灵活,对复杂业务逻辑的调试成本高,难以大规模企业线上部署。

  3. Semantic Kernel作为一个轻量级开发套件,为企业提供了更加灵活、模块化的解决方案。

  4. Semantic Kernel兼容多种编程语言,并提供了强大的服务和插件管理,有利于企业标准化和规范化AI应用开发。

  5. Semantic Kernel面向未来设计,易于连接最新的AI模型,并且支持新模型的无缝替换

以下是一个关于 Langchain 与 Semantic Kernel 的直观比较:

特性/框架LangchainSemantic Kernel
设计理念高度抽象与封装高度模块化与灵活性
插件架构抽象概念多,使得代码复杂灵活、易于集成现有API和服务
系统化配置和管理复杂多样,让人一头雾水唯一核心组件Kernel提供所有系统化配置和管理
灵活性不灵活,与快速变化的AI场景不够协同面向未来设计,易于适应新技术
学习成本抽象层次多,学习成本较高设计直观,初学者门槛低
编程语言支持不包含详情支持C#、Python和Java
企业适用性适用性有限,复杂业务调试困难专为企业设计,强调模块化和灵活性

微软推出的开源 Semantic Kernel 是一款强大的 AI SDK,携企业级实力和未来洞察,开创智能应用构建新方案。其自动化、模块化设计预示着AI开发的新风向。对替换 LangChain 而言,Semantic Kernel 绝对是理想的选择。

4、Semantic Kernel 快速实践

4.1、接入 ChatGPT 试试

接入 LLM 是进行一系列 Agent 开发的最基本能力,因此我们先接入一个 Azure 提供的 GPT 服务试试,参考Getting Started以及文档,实践了下 LLM 的非流式和流式接入。

import osimport sys## 因为是使用的.env对LLM进行的配置,所以需要指明.env路径,具体参考Getting Startednotebook_dir = os.path.abspath("")sys.path.append(notebook_dir)# 导入Azure服务和服务配置以及聊天历史类from semantic_kernel.connectors.ai.open_ai import (
    AzureChatCompletion,
    AzureChatPromptExecutionSettings,)from semantic_kernel.contents import ChatHistory# 选择azure服务类型service_id = "azure"# 实例化一个Azure服务azure_chat_service = AzureChatCompletion(
    service_id=service_id,)# 对实例进行相关设置azure_prompt_execution_settings = AzureChatPromptExecutionSettings(
    service_id=service_id,
    max_tokens=150,
    temperature=0.7,
    top_p=1,
    frequency_penalty=0.5,
    presence_penalty=0.5,)# 构造Message,通过ChatHistory高效实现content = "You are an AI assistant that helps people find information."chat = ChatHistory()chat.add_system_message(content)chat.add_user_message("你是谁?")# 非流式调用并输出result = await azure_chat_service.get_chat_message_contents(
    chat_history=chat, 
    settings=azure_prompt_execution_settings)print(str(result[-1]))你好!我是一个人工智能助手,可以帮助你查找信息、解答问题和进行对话。有什么我可以帮助你的吗?# 流式调用和输出stream = azure_chat_service.get_streaming_chat_message_contents(
    chat_history=chat, 
    settings=azure_prompt_execution_settings)async for token in stream:
    print(token[-1], end="")  # end = "" to avoid newlines你好!我是一个人工智能助手,可以帮助你查找信息、解答问题和进行对话。有什么我可以帮助你的吗?

是不是非常的方便和简单。

4.2、定义第一个 Agent

尝试一个简单的灯具控制 Agent

import asynciofrom semantic_kernel import Kernelfrom semantic_kernel.connectors.ai.open_ai import AzureChatCompletionfrom semantic_kernel.connectors.ai.function_call_behavior import FunctionCallBehaviorfrom semantic_kernel.connectors.ai.chat_completion_client_base import ChatCompletionClientBasefrom semantic_kernel.functions.kernel_arguments import KernelArgumentsfrom semantic_kernel.contents.chat_history import ChatHistoryfrom semantic_kernel.connectors.ai.open_ai.prompt_execution_settings.azure_chat_prompt_execution_settings import (
    AzureChatPromptExecutionSettings)from typing import Annotatedfrom semantic_kernel.functions import kernel_function# 定义一个灯具控制的插件(Plugin,一系列工具的集合)# LightsPlugin 包含 get_state 和 change_state 两个 functions,通过@kernel_function装饰器高效实现class LightsPlugin:
    lights = [
        {"id": 1, "name": "Table Lamp", "is_on": False},
        {"id": 2, "name": "Porch lite", "is_on": False},
        {"id": 3, "name": "Chandelier", "is_on": True},
    ]

    @kernel_function(
        name="get_lights",
        description="Gets a list of lights and their current state",
    )
    def get_state(self) -> Annotated[str, "the output is a string"]:
        """Gets a list of lights and their current state."""
        return self.lights

    @kernel_function(
        name="change_state",
        description="Changes the state of the light",
    )
    def change_state(self, id: int, is_on: bool) -> Annotated[str, "the output is a string"]:
        """Changes the state of the light"""
        for light in self.lights:
            if light["id"] == id:
                light["is_on"] = is_on
                return light
        return None# 定义主函数async def main():
    # 初始化Kernel
    kernel = Kernel()

    # 添加Azure OpenAI chat服务,仍然是通过.env配置
    kernel.add_service(AzureChatCompletion(
        env_file_path="./.env"
    ))

    # 如果需要直接诶使用Azure服务,可以通过kernel直接获取,十分方便
    chat_completion: AzureChatCompletion = kernel.get_service(type=ChatCompletionClientBase)

    # 插件添加到kernel
    kernel.add_plugin(
        LightsPlugin(),
        plugin_name="Lights"
    )

    # 配置LLM工具调用的方式,auto自主决定
    execution_settings = AzureChatPromptExecutionSettings(tool_choice="auto")
    execution_settings.function_call_behavior = FunctionCallBehavior.EnableFunctions(auto_invoke=True, filters={})

    history = ChatHistory()

    userInput = None
    while True:
        userInput = input("User > ")
        if userInput == "exit":
            break

        history.add_user_message(userInput)

        result = (await chat_completion.get_chat_message_contents(
            chat_history=history,
            settings=execution_settings,
            kernel=kernel,
            arguments=KernelArguments()
        ))[0]

        print("Assistant > ", result)if __name__ == "__main__":
    asyncio.run(main())User > 有哪些灯?Assistant >  我们有以下几盏灯:1. 台灯 (Table Lamp) - 关闭状态2. 门廊灯 (Porch lite) - 关闭状态3. 吊灯 (Chandelier) - 打开状态User > 把2打开,把3关了Assistant >  操作完成 。2. 门廊灯 (Porch lite) 已打开。3. 吊灯 (Chandelier) 已关闭。User > 完了吗,我看看状态Assistant >  当前灯光状态如下:1. 台灯 (Table Lamp) - 关闭状态2. 门廊灯 (Porch lite) - 打开状态3. 吊灯 (Chandelier) - 关闭状态User >

Reference

[1] learn.microsoft.com/en-

[2] mp.weixin.qq.com/s/ZJTf

[3] github.com/microsoft/se

[4] mp.weixin.qq.com/s/mtaX


大家好,我是白鲸开源的联合创始人代立冬,同时担任 Apache DolphinScheduler 的 PMC chair 和 SeaTunnel 的 PMC。作为 Apache Foundation 的成员和孵化器导师,我积极参与推动多个开源项目的发展,帮助它们通过孵化器成长为 Apache 的顶级项目。

今天的分享的主题其实还是从开源到商业,Apache SeaTunnel 本身就是做数据同步软件,也经历过 Apache 孵化器的孵化,目前已经毕业成为顶级项目,也会跟大家分享一下它的核心特性。包括为什么我们又重新造轮子,那 Doris 和 WhaleTunnel/SeaTunnel 这个多元实时数仓是怎么去解决一些社区用户的问题?另外也给大家分享一下我们社区的 roadmap 和最近的一些进展。

白鲸开源愿景与使命

白鲸开源其实是一家 DataOps 解决方案提供商,目前致力于数据调度和同步领域,简单理解就是大数据的降本增效。我们的目标是通过高效的数据处理解决方案来降低运营成本并提高效率。



当前的重点是改善数据调度和同步的流程,或者是从开发到生产上线整个流程的打通,从而实现从开发到生产的快速过渡。

核心开源项目

我们主要投入于两个 Apache 顶级开源项目:Apache DolphinScheduler 和 Apache SeaTunnel。

DolphinScheduler 是一个分布式工作流调度平台,而 SeaTunnel 则专注于数据集成和同步。

这两个项目在国内影响力也越来越大,在整个大数据生态包括在数据处理和同步方面发挥着关键作用。

数据同步中的挑战

在数据同步领域,我们面临多种挑战,处理众多数据源、版本兼容问题、大数据量带来的数据丢失或重复问题。比如说像 Oracle,它有很多版本,而且每个版本之间是不兼容的,所以你需要去支持它的 CDC,或者是要能够去捕获到它的 DDL 变更这样的场景,每个版本你都要去考虑怎么去适配,这个工作量是很大的。

此外,如何保证数据的精确一致性,以及在出现问题时如何快速回滚?同步过程中需要监控等等,这些都是数据同步中面临的痛点问题。

还有一个痛点的情况,就是当你频繁地去读取 binlog,对数据源的影响会非常大,DBA 会非常关注对数据库源数据库端产生的压力情况,还有大事务 schema 变更会影响到下游,尤其数据量大的这种场景下,大家都会非常关心!

还有离线跟实时同步,通常以前都是需要分开写,这也是面临的问题,就是批是批,流是流,维护会非常的困难。

经常做数据迁移的小伙伴肯定会面临这样痛苦的过程,就是我要做数据迁移通常都是要以月/季的,数据迁移几个月、小半年这样的一个时间,SeaTunnel 的定位其实就是做一个高性能的数据集成工具,希望能够更多的像调度工具和上下游的这些工具去打通,我们也欢迎大家能够去集成 SeaTunnel 去做数据处理的这个事情!



在今年的 6 月,Apache SeaTunnel 正式成为了 Apache 基金会的顶级项目,也是首个国人主导的数据集成项目在 Apache 基金会占了一席之地,它不仅能够应对每天同步万亿级的数据量非常大的场景,包括在海外现在也有一些很典型的案例,像在美国最大的商业银行JPMorgan、印度电信、英国最大的零售商等都应用在了生产的环境中,在国内像哔哩哔哩、唯品会每天同步上千亿的数据,这都是 SeaTunnel 的用户案例。



SeaTunnel 核心功能与目标



简单易用

SeaTunnel 的第一个目标是简单易用。为此,社区最近开源了一个拖拉拽的可视化版本,但距离真正的简单易用可能还有一些距离。同时,它既支持命令行操作,也支持 Web 可视化的操作。

支持多种数据源

目前,SeaTunnel 已经支持 100 多个数据源。这种广泛的兼容性使得它可以适应不同的数据环境。

批流一体

SeaTunnel 还支持批流一体的操作,这意味着不需要为批处理和流处理编写两套不同的代码。这种设计可以大大提高开发效率和代码维护性。

支持整库同步和自动变更

SeaTunnel 可以支持整库同步,同时也支持自动变更,这主要解决了数据切割的问题。全量到增量的无锁自动切换可以大大提高数据处理的效率。

支持读缓冲和动态速率控制

SeaTunnel 可以支持同一个源同步到多个目标,比如从 MySQL 同步到 Hive 或者 Doris。同时,它还支持动态速率的控制,尤其是源数据库端的小伙伴会非常关注这个功能。这种设计可以在保证数据处理效率的同时,防止因速率过快导致的资源浪费或者其他问题。

支持 schema 变更和断点续传

SeaTunnel 可以支持 schema 变更,即数据库结构的变化。同时,它还支持断点续传和精确一致性,这需要上下游数据库的配合才能实现。这种设计可以大大提高数据处理的稳定性和准确性。

支持云组件和精确一致性

SeaTunnel 不仅支持各种云组件,如 RedShift、S3、RDS、DynamoDB 等,还支持像阿里云的 OSS File、TableStore 等。

同时,它可以实现精确一致性,这是通过上下游数据库的配合实现的。这种设计可以大大提高数据处理的可靠性和准确性。

但是像 HDFS 它就做不到这个精确一致。MySQL 这些传统的数据库基本上都是可以做到精确一致

比如说我们要从 MySQL 要去同步到 Doris,或者有些场景可能比如说要从 Mongo 去同步,或者是从 Oracle、MySQL 要去同步到这个像 Doris 的这样的去做 OLAP,去做这个一些实时数仓的一些场景会比较常见一些。比如说它是否能支持双向同步,我也可以支持各种数据源之间的 Source,以及目标端 Sink,这是它的数据去向。

适用场景

SeaTunnel 适用于从各种数据源到各种目标的数据集成和同步场景。它支持双向同步,可以支持各种数据源之间的 Source 以及目标端的 Sink。



以前常见的互联网解决方案,有一些Spark和Flink的场景,那现在你 SeaTunnel 的时候,它会有一个 API,它其实是可以支持跑在 Spark、Flink 上的。它还有一个 Source API,其实是用于扩展各种数据源,我们的目标其实是连接各种数据源,不仅仅是数据库,那还有 SaaS,还有 API 接口,那还有一些本地的文件数据。

此外,它还支持批量、全量、增量的集成,甚至无主键的数据也可以支持。

性能优势

与一些常见的互联网解决方案相比,例如 Airbyte 和 Data X 单机版,SeaTunnel 的性能要快 30 多倍。

我们跟 Data X 的 PK 时候只有单机,一般是 30% - 50% 之间,它的单机做得还可以。但是它没有集群化的版本,也只能做离线的场景。

迭代速度优势

另一个值得称赞的是,SeaTunnel 的版本迭代速度非常快,基本上每个月都会发布一个新的版本。这种快速迭代的速度不仅增加了功能的新颖性和实用性,也提高了整个项目的活力和竞争力。

架构简介

Apache SeaTunnel 的整体架构是无中心化的,类似于 DolphinSchedule 的设计,已经是非常成熟的一个架构了。这种设计可以保证数据从源到目标的流畅传输。



它的核心思想是将任务分解成多个 pipeline,如果某个链条出现问题,用户只需回滚相应的链条,而不是整个作业。这种设计在时间和资源成本上更加节约,同时也提高了性能。

从上图左侧来说它是支持各种源,有 batch、stream、 CDC 的场景,也有这个各种需要去读数据 read data,然后读到 SeaTunnel 这个架构之上,其实就是也有一个 coordinator,是充当了一个 master 的角色,大家把它理解成一个 master,然后 task execution service 其实就是做具体任务的,把它理解成 worker 这样的一个角色,可以这么去理解, master 是负责去分配这任务,然后 worker 是去执行具体的任务,但 worker 执行任务的时候,它其实会分到底是读取的任务,还是做数据转换的任务,还是去写的任务?

而 read task、write task,或是做 convert transform 的 task,这里边其实会有 master,还有 resource manager 去做资源管理以及做 pipeline 设计!

此外,SeaTunnel 使用了动态线程共享技术,避免了资源浪费。以 Spark 为例,启动作业时需要消耗大量的内存,而使用 SeaTunnel 或其商业版 WhaleTunnel,内核可以最大限度地被共享,内核与开源版保持一致。

架构特性

SeaTunnel 支持 Flink 和 Spark,并在近两年设计了一个专为数据同步场景设计的引擎 Zeta。


尽管 Spark 和 Flink 也是为计算而生的,但数据同步的要求与计算有所不同,它更强调性能、稳定性和支持的数据源数量。因此,我们推荐使用 Zeta 引擎。


此外,SeaTunnel 解决了 Spark 和 Flink 等场景中存在的问题。 任务出错时需要回滚整个作业; 可视化开发方面也没有提供完整的解决方案; 对于资源占用过多的场景,一个 task 只能处理一张表,这可能导致资源浪费和影响 DBA 业务场景; 以及对表结构变更、CDC 等场景的不支持。

而 SeaTunnel 正是为了解决这些问题而设计的。

解耦设计

另一个重要的特性是 SeaTunnel 与执行引擎解耦。最早的版本只支持 Spark,但随着 Spark 版本的升级,我们面临着兼容性问题。每个 Connector 都需要为不同的版本重新设计实现,这是一项耗时且繁琐的工作。因此,我们定义了一套 SeaTunnel 自己的 API,与具体的执行引擎解耦。这样,当新的更快、更高性能的数据引擎出现时,我们只需要更新 Connector 即可。



此外,我们还提供了 Source API、Sink API、checkpoint API 和 translation 层等多种 API,通过翻译层将每个卡点翻译成 Flink、Spark、Zata 等不同引擎的底层 API,避免了每个 Connector 都需要适配的问题。同时,也支持流批一体的新 Connector,只需按 API 实现一次即可。

总之,SeaTunnel 的架构和特性使其成为解决数据同步等场景的理想选择。它不仅提供了简单易用的界面和强大的功能,还通过与执行引擎解耦和多种 API 的支持提高了效率和性能。

无中心化设计

前面提到了 SeaTunnel 采用了无中心化的设计,每个 server 都可以充当 master 的角色,也可以充当 worker 的角色。这种设计具有自动选举功能,确保了系统的稳定性和可靠性。



同时,它还支持弹性的伸缩,例如在进行精确处理时,会涉及到 checkpoint 以及分布式快照的创建,以确保数据的完整性和一致性。

这种设计也支持断点续传,对于因异常导致的数据传输中断,可以自动回退到上一个切割方向的点,保证数据传输的连续性和完整性。

性能测试与对比

为了测试 SeaTunnel 的性能,我们进行了一些场景的测试。

从 MySQL 到 Hive,PG 到 Hive,SQL Server 到 Hive 和 Oracle 到 Hive 的场景中,SeaTunnel 的同步速度比 Data X快 30%-50%。



在云同步的场景中,SeaTunnel 的表现更为出色,其性能是 Airbat 的 30 多倍,与 AWS 的数据同步工具 Glue 相比,也快2-5 倍。



我们还对比了 SeaTunnel 与 Data X、Sqoop、Flume 等数据集成工具。这些工具在支持自动建表、整库同步、断点续传、离线增量和 CDC 等方面的能力各有不同。

其中,Data X 社区虽然已经不再维护,但其用户仍然较多。然而,大多数场景中,Data X 并不能提供很好的支持。相比之下,SeaTunnel 在这些方面表现出色。

支持多种数据源



SeaTunnel 支持多种数据源,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。

它还支持将数据同步到 Doris 等数据库。用户可以通过可视化的界面配置数据源信息,而不需要为每个任务都手动配置。




字段映射



状态监控

此外,SeaTunnel 还支持流的导入、MySQL 的 CDC 等特性,并支持多表同步或整库同步等场景。

实时数仓方案

白鲸开源基于 Apache DolphinScheduler 和 Apache SeaTunnel 打造的商业产品 WhaleStudio ,是分布式、云原生并带有强大可视化界面的 DataOps 系统,增加了商业客户所需的企业级特性:


  • 全面支持云原生—云、仓、湖 实时/离线批流一体化任务管控

  • 低代码实现企业大数据的高可用调度和海量数据批量/实时同步

  • 完善的 DataOps 流程可无缝集成代码工具

  • 丰富的数据源对接和传统 ETL 数据组件支持

  • 增强可观测性和操作性,提高运维与任务运行态人工干预能力

  • 复杂时间的管理优化&灵活多样的触发机制&强大的数据科学平台支持

  • 完善的权限控制&审计系统

在 Whalestudio 中,DolphinScheduler 和 SeaTunnel 被视为两个独立的模块,但它们共享一些共同的功能,例如数据源中心的配置只需要进行一次。这种设计使得数据同步和调度更加高效和便捷。



首先,我们需要明白开源并不意味着无限制的免费。在开源世界中,每个项目都有其边界,只有将项目做得非常垂直,才能更好地进行迭代和创新。

因此,我们的开源理念是专注于将项目做得更精细、更垂直,以实现更好的可迭代性。与商业理念不同的是,开源强调的是共享和协作,而商业则更注重整体解决方案和客户的需求。

SeaTunnel 是一个开源项目。在商业版 WhaleStudio 当中,IDE 和可视化配置能力是其中的重要组成部分,它们可以帮助用户轻松地进行 SQL 编写、Python 编程以及业务日期切分等操作。此外,我们还在商业版中提供了一些额外的功能,例如对监管报送等数据的加权处理,以及更丰富的连接器支持。

支持虚拟表

在开源项目中,我们有一个虚拟表的抽象概念。比如说 Kafka、文件这些我们都把它抽象成表,这方便后边去做字段的映射。比如说要去读 Excel 的数据,读到 Doris,或者说其他的数据库,比如说 MySQL,那前面做好了映射,虚拟表建好,后边只是去拖拽一下就 OK 了,不需要再去做这个映射配置这么复杂的事情,我们前阵子跟 SelectDB 做了一个商业的联合解决方案,就是 SelectDB 加上 WhaleTunnel。



在这个场景中,各种产品充当着不同的角色。SelectDB 用于实时数仓,主要处理数据分析和查询。WhaleTunnel 用于数据同步和导入,它可以从各种数据源获取数据并将其导入到目标位置。WhaleScheduler 用于协调和调度这些任务,确保数据在正确的时间被处理。



这些产品共同构成了一个完整的数据同步和集成解决方案,可以轻松地处理各种数据源,并通过调度和同步机制将数据导入到实时数仓中进行分析。这种方案具有高效、灵活和可扩展的优点,可以帮助用户快速实现从开发到生产上线的整个流程。

同时,这个解决方案还提供了一些额外的功能,如调试、IDE 支持和数据工作流的血缘关系分析等,这些功能都是在商业版中提供的。用户可以通过这个方案获得更全面的数据同步、集成和分析能力,从而更好地管理和利用用户的数据资产。

Roadmap

在未来的发展计划中,我们将继续丰富连接器支持,例如增加对 Oracle CDC 和 Mongo DB CDC 的支持。同时,我们也将提供更多可插拔能力,以便用户可以根据自己的需求进行定制。



此外,我们还将与主流的调度系统集成,例如 Apache DolphinScheduler 和 Airflow,以提供更全面的解决方案。

最后,我们还将支持 K8S operator 场景,以帮助用户更好地管理和调度他们的数据工作流。

总之,我们的目标是让中国的开源项目走向世界,让更多的人了解并参与到开源项目中来。

无论您是开源的支持者还是商业化的拥护者,我们都欢迎您加入到我们的大家庭中来。谢谢大家!

本文由 白鲸开源科技 提供发布支持!


在大数据作业开发中,数据集成工具是非常重要的一个环节,一个好的数据集成系统从可用性、架构扩展性、底层引擎选型、数据源支持能力等方面都需要一定的考量,在本文中汇总了十款开源的数据集成系统,作者本人在过往的开发过程中,使用过其中的7款(DataX、Flume、Seatunnel、Canal、BitSail、InLong、Chunjun(Flinkx) ),其中三款(AiyByte、CloudCanal、Nifi),本文是对于每款数据集成软件的基础介绍说明,如果对于实践部分感兴趣的话,可以关注后续内容(如果你对于数据集成感兴趣的话,可以加入我们的小群(文末扫码),一起来交流&测试)

wx添加kubedata,加入云原生大数据交流群,或者关注公众号:云原生大数据技术荟,领取干货资料

本文分为两个部分,一部分是对于十款不同组件的介绍,包括基本信息、特性支持、架构介绍等等,可以当作对于每个组件的基本了解,当然了,如果你有兴趣想参与测试每个组件的话,也欢迎一起来进行实践操作。另一部分是关于开源组件的一些基础维度对比,包括开源社区、背后支持企业、活跃度等等。

  1. Apache InLong: 一站式、全场景的海量数据集成框架

  2. SeaTunnel: 下一代高性能、分布式、海量数据集成框架

  3. Chunjun:基于Flink的批流统一的数据同步工具

  4. BitSail : 高性能数据集成引擎

  5. AirByte:开源的数据移动基础设施

  6. CloudCanal : 数据同步、迁移工具

  7. Flume :开源分布式、高可靠的流式日志采集系统

  8. Canal:数据库增量日志解析、采集工具

  9. Nifi:一个易于使用、功能强大且可靠的系统,用于处理和分发数据

  10. DataX:异构数据源离线同步工具

一:Apahce InLong :一站式、全场景的海量数据集成框架

Apache InLong(应龙)是一站式、全场景的海量数据集成框架,同时支持数据接入、数据同步和数据订阅,提供自动、安全、可靠和高性能的数据传输能力,方便业务构建基于流式的数据分析、建模和应用。 InLong 项目原名 TubeMQ ,专注于高性能、低成本的消息队列服务。为了进一步释放 TubeMQ 周边的生态能力,我们将项目升级为 InLong,专注打造一站式、全场景海量数据集成框架。 Apache InLong 依托 10 万亿级别的数据接入和处理能力,整合了数据采集、汇聚、存储、分拣数据处理全流程,拥有简单易用、灵活扩展、稳定可靠等特性。 该项目最初于 2019 年 11 月由腾讯大数据团队捐献到 Apache 孵化器,2022 年 6 月正式毕业成为 Apache 顶级项目。


InLong 架构设计

InLong有两种架构模式,一种是标准架构,提供了更加丰富的能力,也支持Dashboard、CLI、API、SDK的能力,轻量化架构是将中间的数据集成层单独剥离了出来,更加的简单、灵活。

标准架构:包含 InLong Agent、Manager、MQ、Sort、Dashboard 等所有 InLong 组件,同时支持`数据接入`、`数据同步`和`数据订阅`。




轻量化架构:只包含 InLong Sort 一个组件,也可以搭配 Manager,Dashboard 一起使用。轻量化架构简单、灵活,支持`数据同步`。



InLong的特性支持

  • 简单易用:基于 SaaS 模式对外服务,用户只需要按主题发布和订阅数据即可完成数据的上报,传输和分发工作

  • 稳定可靠:系统源于实际的线上系统,服务上十万亿级的高性能及上千亿级的高可靠数据数据流量,系统稳定可靠

  • 功能完善:支持各种类型的数据接入方式,多种不同类型的 MQ 集成,以及基于配置规则的实时数据 ETL 和数据分拣落地,并支持以可插拔方式扩展系统能力

  • 服务集成:支持统一的系统监控、告警,以及细粒度的数据指标呈现,对于管道的运行情况,以数据主题为核心的数据运营情况,汇总在统一的数据指标平台,并支持通过业务设置的告警信息进行异常告警提醒

  • 灵活扩展:全链条上的各个模块基于协议以可插拔方式组成服务,业务可根据自身需要进行组件替换和功能扩展


二、SeaTunnel:下一代高性能、分布式、海量数据集成框架

SeaTunnel是一个非常易于使用、超高性能的分布式数据集成平台,支持海量数据的实时同步。它每天可以稳定高效地同步数百亿数据,已被近100家企业应用于生产。

SeaTunnel专注于数据集成和数据同步,主要解决数据集成领域的常见问题:

  • 各种数据源:有数百个版本不兼容的常用数据源。随着新技术的出现,出现了更多的数据源。用户很难找到一个工具,可以完全和快速地支持这些数据源。

  • 复杂的同步方案:数据同步需要支持离线全同步、离线增量同步、CDC、实时同步、全库同步等多种同步场景。

  • 高资源需求:现有的数据集成和数据同步工具往往需要庞大的计算资源或JDBC连接资源来完成海量小表的实时同步。这增加了企业的负担。

  • 缺乏质量和监控:数据集成和同步过程经常会出现数据丢失或重复。同步过程缺乏监控,无法直观了解任务过程中数据的真实的情况。

  • 复杂的技术堆栈:企业使用的技术组件不同,用户需要为不同的组件开发相应的同步程序来完成数据集成。

  • 管理和维护困难:受限于不同的底层技术组件(Flink/Spark),离线同步和实时同步往往已经被分开开发和管理,这增加了管理和维护的难度。


SeaTunnel特性支持

  • 丰富且可扩展的连接器:SeaTunnel提供了一个不依赖于特定执行引擎的连接器API。基于此API开发的连接器(Source、Transform、Sink)可以在目前支持的SeaTunnel Engine、Flink、Spark等多种不同引擎上运行。

  • 连接器插件:插件设计允许用户轻松开发自己的连接器并将其集成到SeaTunnel项目中。目前,SeaTunnel支持100多个连接器,并且数量正在激增。以下是当前支持的连接器列表

  • 批次流整合:基于SeaTunnel Connector API开发的连接器完美兼容离线同步、实时同步、全同步、增量同步等场景。它们大大降低了管理数据集成任务的难度。

  • 支持分布式快照算法,保证数据一致性。

  • 多引擎支持:默认情况下,SeaTunnel使用SeaTunnel引擎进行数据同步。SeaTunnel还支持使用Flink或Spark作为Connector的执行引擎,以适应企业现有的技术组件。SeaTunnel支持多个版本的Spark和Flink。

  • JDBC复用,数据库日志多表解析:SeaTunnel支持多表或全库同步,解决了跨JDBC连接的问题;支持多表或全库日志阅读和解析,解决了CDC多表同步场景需要处理日志重复阅读和解析的问题。

  • 高吞吐量、低延迟:SeaTunnel支持并行阅读和写,提供稳定可靠的数据同步能力,具有高吞吐量、低延迟的特点。

  • 完美的实时监控:SeaTunnel支持数据同步过程中每一步的详细监控信息,让用户轻松了解同步任务读写的数据数量、数据大小、QPS等信息。

  • 支持两种工作开发方法:编码和画布设计。SeaTunnel网络项目github.com/apache/seatu提供作业、调度、运行和监控功能的可视化管理。







三:chunjun:基于Flink的批流统一的数据同步工具

纯钧(ChunJun,原名FlinkX),是一款稳定、易用、高效、批流一体的数据集成框架,目前基于实时计算引擎Flink实现多种异构数据源之间的数据同步与计算,已在上千家公司部署且稳定运行。


纯钧(ChunJun)将不同的数据库抽象成了reader/source 插件,writer/sink 插件和lookup 维表插件,其具有以下特点:

  • 基于实时计算引擎Flink,支持JSON模版配置任务,兼容Flink SQL语法;

  • 支持分布式运行,支持flink-standalone、yarn-session、yarn-per job等多种提交方式;

  • 支持Docker一键部署,支持K8S 部署运行;

  • 支持多种异构数据源,可支持MySQL、Oracle、SQLServer、Hive、Kudu等20多种数据源的同步与计算;

  • 易拓展,高灵活性,新拓展的数据源插件可以与现有数据源插件即时互通,插件开发者不需要关心其他插件的代码逻辑;

  • 不仅仅支持全量同步,还支持增量同步、间隔轮训;

  • 批流一体,不仅仅支持离线同步及计算,还兼容实时场景;

  • 支持脏数据存储,并提供指标监控等;

  • 配合checkpoint实现断点续传;

  • 不仅仅支持同步DML数据,还支持Schema变更同步;

不同的数据源头被抽象成不同的Reader插件,不同的数据目标被抽象成不同的Writer插件。理论上,FlinkX框架可以支持任意数据源类型的数据同步工作。作为一套生态系统,每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。



在底层实现上,FlinkX依赖Flink,数据同步任务会被翻译成StreamGraph在Flink上执行,基本原理如下图:



四、BitSail:高性能数据集成引擎

BitSail是字节跳动开源的基于分布式架构的高性能数据集成引擎, 支持多种异构数据源间的数据同步,并提供离线、实时、全量、增量场景下的全域数据集成解决方案,目前服务于字节内部几乎所有业务线,包括抖音、今日头条等,每天同步数百万亿数据

BitSail支持功能

  • 全域数据集成解决方案, 覆盖离线、实时、增量场景

  • 分布式以及云原生架构, 支持水平扩展

  • 在准确性、稳定性、性能上,成熟度更好

  • 丰富的基础功能,例如类型转换、脏数据处理、流控、数据湖集成、自动并发度推断等

  • 完善的任务运行状态监控,例如流量、QPS、脏数据、延迟等


BitSail使用场景

  • 异构数据源海量数据同步

  • 流批一体数据处理能力

  • 湖仓一体数据处理能力

  • 高性能、高可靠的数据同步

  • 分布式、云原生架构数据集成引擎


BitSail主要特点

  • 简单易用,灵活配置

  • 流批一体、湖仓一体架构,一套框架覆盖几乎所有数据同步场景

  • 高性能、海量数据处理能力

  • DDL自动同步

  • 类型系统,不同数据源类型之间的转换

  • 独立于引擎的读写接口,开发成本低

  • 任务进度实时展示,正在开发中

  • 任务状态实时监控




五、AiyByte:开源的数据移动基础设施

Airbyte是一个开源的数据移动基础设施,用于构建提取和加载(EL)数据管道。它的设计具有多功能性、可扩展性和易用性。

在Airbyte中有三个主要组件需要了解:

  1. 连接器

  • 350多种预建连接器:Airbyte的连接器目录“开箱即用”,提供超过350种预建连接器。这些连接器可用于在几分钟内开始将数据从源复制到目标。

  • 无代码连接器生成器:您可以轻松地扩展Airbyte的功能,通过No-Code Connector Builder等工具来支持您的自定义用例。

  1. 平台:Airbyte的平台提供了配置和扩展数据移动操作所需的所有水平服务,可作为云管理或自我管理。

  2. 用户界面:Airbyte具有UI、PyAirbyte(Python库)、API和Terraform Provider,可与您首选的工具和基础设施管理方法集成。

Airbyte适用于广泛的数据集成用例,包括AI数据基础设施和EL(T)工作负载。Airbyte还可以嵌入到您自己的应用程序或平台中,为您的产品提供动力。


Airbyte协议有两个主要组成部分:源和目的地。这些组件被称为Actor。源是由一系列标准接口描述的应用程序。此应用程序从基础数据存储中提取数据。在此上下文中,数据存储是指实际存储数据的工具。一种数据存储器,包括:数据库、API、任何产生数据的东西等等。例如,Postgres Source是一个从Postgres(一个数据存储)拉取的Source。目的地是一个应用程序,它由一系列标准接口描述,用于将数据加载到数据存储区中。

协议用于描述数据的关键原语是Catalog、Configured Catalog、Stream、Configured Stream和Field:

  • 流--流描述了资源的模式和关于用户如何与该资源交互的各种元数据。此上下文中的资源可能指数据库表、REST API中的资源或数据流。

  • 字段-字段指的是流中的“列”。在数据库中,它是一个列;在JSON对象中,它是一个字段。

  • Catalog-catalog是一个流列表,用于描述数据存储中源所表示的数据。

  • 一个Actor可以通过Actor Specification通告关于它自己的信息。规范共享的主要信息之一是配置Actor所需的信息。









六、CloudCanal :数据同步、迁移 工具

CloudCanal 是一款 数据同步、迁移 工具,帮助企业构建高质量数据管道,具备实时高效、精确互联、稳定可拓展、一站式、混合部署、复杂数据转换等优点。

数据迁移

指定数据源数据全量搬迁到目标数据源,支持多种数据源,具备断点续传、顺序分页扫描、并行扫描、元数据映射裁剪、自定义代码数据处理、批量写入、并行写入、数据条件过滤等特点,对源端数据源影响小且性能好,同时满足数据轻度处理需求。

可选搭配结构迁移、数据校验和订正,满足结构准备或数据质量的需求。

数据同步

通过消费源端数据源增量操作日志,准实时在对端数据源重放,以达到数据同步目的,具备断点续传、DDL 同步、元数据映射裁剪、自定义代码数据处理、操作过滤、数据条件过滤、高性能对端写入等特点。

可选搭配结构迁移、数据初始化(全量迁移)、单次或定时数据校验与订正,满足数据准备和业务长周期数据同步对于数据质量的要求。

结构迁移和同步

帮助用户快速将源端结构执行到对端的功能,具备类型转换、数据库方言转换、命名映射等特点,可独立使用,也可作为数据迁移或数据同步准备步骤。

数据校验和订正

将源端和对端数据分别取出,逐字段对比,可选择差异数据订正,功能可单独使用,也可配合数据迁移或数据同步使用,满足用户数据质量验证与修复的需求。


架构设计



  • Console

    • 集中化的管控服务,以 web 服务集群存在。

    • 承载产品化功能,包括数据源/机器/数据任务生命周期管理、容灾调度、监控告警、元数据管理等。

  • Sidecar

    • 部署于具体数据迁移同步机器上。

    • 承担包括获取需要运行的任务配置、启停数据任务进程、收集和上报任务状态、执行任务的健康检查等工作。

  • CloudCanal Core

    • 部署于具体数据迁移同步机器上。

    • 执行具体的数据迁移、同步、校验、订正任务。


内核架构



  • 数据源插件

    • 包含各个数据库、消息、数据仓库等数据源数据读写、元数据获取逻辑和对应驱动。

    • 各个插件通过 Java 类加载机制隔离,任务运行时只加载对应数据源插件。

  • 核心

    • 包含内核代码骨架、操作过滤、元数据映射、DDL 转换、自定义数据处理等部分。

  • 支撑

    • 包含元数据、任务配置、位点、监控指标,以及和管控交互的逻辑

使用场景


七、Flume:分布式、可靠且可用的数据七、Flume:分布式、可靠且可用的数据

Apache Flume是一个开源的、分布式的数据采集系统,旨在可靠地、高效地从各种数据源采集、聚合和传输数据到目的地。Flume的设计目标是解决大规模数据采集的可靠性和扩展性问题。其基于可插拔的架构和配置驱动的方式,使得用户可以方便地定制和扩展数据采集的流程。


Flume的核心组件

2.1 Source(数据源)

Flume的数据源是指数据采集的起点,它负责从外部数据源读取数据并将其传递给Flume的通道。Flume提供了多种数据源类型,例如Avro Source、Thrift Source和Spooling Directory Source。Avro Source支持通过Avro协议接收数据,Thrift Source支持通过Thrift协议接收数据,而Spooling Directory Source则监控指定目录下的文件,并将文件内容作为数据源。

2.2 Channel(通道)

通道是Flume的核心组件之一,用于缓存和传递从数据源接收到的数据。Flume提供了多种通道类型,如Memory Channel、File Channel和Kafka Channel。Memory Channel将数据存储在内存中,适用于高吞吐量和低延迟的场景;File Channel将数据存储在本地文件系统中,适用于对数据持久化有要求的场景;Kafka Channel基于Apache Kafka实现,支持高可靠性和可扩展性。

2.3 Sink(数据目的地)

Sink是Flume的数据目的地,它负责将数据从通道中取出并发送到指定的目标系统。Flume提供了多种Sink类型,如HDFS Sink、Hive Sink和Elasticsearch Sink。HDFS Sink将数据写入Hadoop分布式文件系统,Hive Sink将数据写入Hive表,Elasticsearch Sink将数据写入Elasticsearch索引。



八、Canal:数据库增量日志解析、采集工具

译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。

基于日志增量订阅和消费的业务包括

  • 数据库镜像

  • 数据库实时备份

  • 索引构建和实时维护(拆分异构索引、倒排索引等)

  • 业务 cache 刷新

  • 带业务逻辑的增量数据处理

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x



工作原理

MySQL主备复制原理

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)

  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)

  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议

  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

  • canal 解析 binary log 对象(原始为 byte 流)



九:Nifi:一个易于使用、功能强大且可靠的系统,用于处理和分发数据

简单的说,NiFi就是为了解决不同系统间数据自动流通问题而建立的。虽然dataflow这个术语在各种场景都有被使用,但我们在这里使用它来表示不同系统间的自动化的可管理的信息流。自企业拥有多个系统开始,一些系统会有数据生成,一些系统要消费数据,而不同系统之间数据的流通问题就出现了。这些问题出现的相应的解决方案已经被广泛的研究和讨论,其中企业集成eip就是一个全面且易于使用的方案。

dataflow要面临的一些挑战包括:

  • Systems fail:网络故障,磁盘故障,软件崩溃,人为事故。

  • Data access exceeds capacity to consume:有时,给定的数据源可能会超过处理链或交付链的某些部分的处理能力,而只需要一个环节出现问题,整个流程都会受到影响。

  • Boundary conditions are mere suggestions:总是会得到太大、太小、太快、太慢、损坏、错误或格式错误的数据。

  • What is noise one day becomes signal the next:现实业务或需求变更快,设计新的数据处理流程或者修改已有的流程必必须要迅速。

  • Systems evolve at different rates:给定的系统所使用的协议或数据格式可能随时改变,而且常常跟周围其他系统无关。dataflow的存在就是为了连接这种大规模分布的,松散的,甚至根本不是设计用来一起工作的组件系统。

  • Compliance and security*法律,法规和政策发生变化。企业对企业协议的变化。系统到系统和系统到用户的交互必须是安全的,可信的,负责任的。

  • Continuous improvement occurs in production通常不可能在测试环境中完全模拟生产环境。

Nifi架构



多年来,数据流一直是架构中不可避免的问题之一。现在有许多活跃的、快速发展的技术,使得dataflow对想要成功的特定企业更加重要,比如soa,API,iot,bigData。此外,合规性,隐私性和安全性所需的严格程度也在不断提高。尽管不停的出现这些新概念新技术,但dataflow面临的困难和挑战依旧,其中主要的区别还是复杂的范围,需要适应的需求变化的速度以及大规模边缘情况的普遍化。NiFi旨在帮助解决这些现代数据流挑战。

NiFi的基本设计概念与基于流程的编程fbp的主要思想密切相关。以下是一些主要的NiFi概念以及它们如何映射到FBP:

NiFi术语FBP Term描述
FlowFileInformation PacketFlowFile表示在系统中移动的每个对象,对于每个FlowFile,NIFI都会记录它一个属性键值对和0个或多个字节内容(FlowFile有attribute和content)。
FlowFile ProcessorBlack Box实际上是处理器起主要作用。在eip术语中,处理器就是不同系统间的数据路由,数据转换或者数据中介的组合。处理器可以访问给定FlowFile的属性及其内容。处理器可以对给定工作单元中的零或多个流文件进行操作,并提交该工作或回滚该工作。
ConnectionBounded BufferConnections用来连接处理器。它们充当队列并允许各种进程以不同的速率进行交互。这些队列可以动态地对进行优先级排序,并且可以在负载上设置上限,从而启用背压。
Flow ControllerScheduler流控制器维护流程如何连接,并管理和分配所有流程使用的线程。流控制器充当代理,促进处理器之间流文件的交换。
Process Groupsubnet进程组里是一组特定的流程和连接,可以通过输入端口接收数据并通过输出端口发送数据,这样我们在进程组里简单地组合组件,就可以得到一个全新功能的组件(Process Group)。


十、DataX : 离线数据同步工具/平台

DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。



设计理念

  • 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

当前使用现状

  • DataX在阿里巴巴集团内被广泛使用,承担了所有大数据的离线同步业务,并已持续稳定运行了6年之久。目前每天完成同步8w多道作业,每日传输数据量超过300TB。




DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader�为数据采集模块,负责采集数据源的数据,将数据发送给Framework。

  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。

  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

DataX3.0核心架构

DataX 3.0 开源版本支持单机多线程模式完成同步作业运行,本小节按一个DataX作业生命周期的时序图,从整体架构设计非常简要说明DataX各个模块相互关系。



核心模块介绍:

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。

  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。

  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。

  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。

  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0

DataX调度流程:

举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

  1. DataXJob根据分库分表切分成了100个Task。

  2. 根据20个并发,DataX计算共需要分配4个TaskGroup。

  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

DataX 3.0六大核心优势

可靠的数据质量监控

    • 完美解决数据传输个别类型失真问题DataX旧版对于部分数据类型(比如时间戳)传输一直存在毫秒阶段等数据失真情况,新版本DataX3.0已经做到支持所有的强数据类型,每一种插件都有自己的数据类型转换策略,让数据可以完整无损的传输到目的端。

    • 提供作业全链路的流量、数据量�运行时监控DataX3.0运行过程中可以将作业本身状态、数据流量、数据速度、执行进度等信息进行全面的展示,让用户可以实时了解作业状态。并可在作业执行过程中智能判断源端和目的端的速度对比情况,给予用户更多性能排查信息。

    • 提供脏数据探测在大量数据的传输过程中,必定会由于各种原因导致很多数据传输报错(比如类型转换错误),这种数据DataX认为就是脏数据。DataX目前可以实现脏数据精确过滤、识别、采集、展示,为用户提供多种的脏数据处理模式,让用户准确把控数据质量大关!

丰富的数据转换功能

  • DataX作为一个服务于大数据的ETL工具,除了提供数据快照搬迁功能之外,还提供了丰富数据转换的功能,让数据在传输过程中可以轻松完成数据脱敏,补全,过滤等数据转换功能,另外还提供了自动groovy函数,让用户自定义转换函数。详情请看DataX3的transformer详细介绍。

精准的速度控制

  • 还在为同步过程对在线存储压力影响而担心吗?新版本DataX3.0提供了包括通道(并发)、记录流、字节流三种流控模式,可以随意控制你的作业速度,让你的作业在库可以承受的范围内达到最佳的同步速度。

"speed": {
   "channel": 5,
   "byte": 1048576,
   "record": 10000
}

强劲的同步性能

  • DataX3.0每一种读插件都有一种或多种切分策略,都能将作业合理切分成多个Task并行执行,单机多线程执行模型可以让DataX速度随并发成线性增长。在源端和目的端性能都足够的情况下,单个作业一定可以打满网卡。另外,DataX团队对所有的已经接入的插件都做了极致的性能优化,并且做了完整的性能测试。性能测试相关详情可以参照每单个数据源的详细介绍:DataX数据源指南

健壮的容错机制

  • DataX作业是极易受外部因素的干扰,网络闪断、数据源不稳定等因素很容易让同步到一半的作业报错停止。因此稳定性是DataX的基本要求,在DataX 3.0的设计中,重点完善了框架和插件的稳定性。目前DataX3.0可以做到线程级别、进程级别(暂时未开放)、作业级别多层次局部/全局的重试,保证用户的作业稳定运行。

    • 线程内部重试DataX的核心插件都经过团队的全盘review,不同的网络交互方式都有不同的重试策略。

    • 线程级别重试目前DataX已经可以实现TaskFailover,针对于中间失败的Task,DataX框架可以做到整个Task级别的重新调度。

极简的使用体验

    • 易用下载即可用,支持linux和windows,只需要短短几步骤就可以完成数据的传输。请点击:Quick Start

    • 详细DataX在运行日志中打印了大量信息,其中包括传输速度,Reader、Writer性能,进程CPU,JVM和GC情况等等。

      • 传输过程中打印传输速度、进度等


      • 传输过程中会打印进程相关的CPU、JVM等


      • 在任务结束之后,打印总体运行情况

wx添加kubedata,加入云原生大数据交流群,或者关注公众号:云原生大数据技术荟,领取干货资料

十款开源数据集成工具对比


社区活跃度开源时间主导者可视化能力底层执行引擎开源协议Apache顶级项目推荐系数
InLongGithub:InLong
Star:1.3kFork:482活跃度:比较活跃
2020.5.30腾讯,腾讯云的数据集成平台基于InLong构建的支持FlinkPulsar/KafkaApache-2.0 license
SeaTunnel(原名:Waterdrop)Github:SeaTunnel
Star:7.2kFork:1.5k活跃度:非常活跃
2018.1.6乐视创建,目前主导者是白鲸开源科技支持支持 SeaTunnel Zeta、Flink、Spark 3 个引擎选其一作为运行时Apache-2.0 license
chunjun(FlinkX)Github:chunjun
Star:3.9kFork:1.7k活跃度:一般活跃
2018.4袋鼠云不支持FlinkApache-2.0 license
BitSailgithub地址:BitSailStar:1.6kFork:323活跃度:非常不活跃2022.9.29字节跳动不支持Flink依赖Hadoop环境Apache-2.0 license
AirBytegithub地址:AirByteStar:14kFork:3.6活跃度:非常活跃2020.9.24AirByte (专门做数据集成的公司,也有对应的企业版)支持自研引擎MIT开源协议
Sqoopgithub地址:Sqoop活跃度:缅怀一下吧始于2009.5终于2021.5.6
不支持MapReduceApache-2.0 license
Flumegithub地址:FlumeStar:1.6kFork:323活跃度:一般活跃2010年Flume 最初是 Cloudera 开发的日志收集系统,受到了业界的认可与广泛应用,后来逐步演化成支持任何流式数据收集的通用系统。不支持Source、Channel、SinkApache-2.0 license
canalgithub地址:CanalStar:1.6kFork:323活跃度:一般活跃2012阿里巴巴不支持client-server 模式,交互协议使用 protobuf 3.0Apache-2.0 license
Nifigithub地址:NifiStar:4.4kFork:2.6k活跃度:非常活跃20142006年NiFi由美国国家安全局(NSA)的Joe Witt创建支持基于DataFlow的编程模型构建的模块化的架构Apache-2.0 license
DataXgithub地址:DataXStar:15.2kFork:5.2k活跃度:非常活跃2015阿里巴巴开源版不支持,有其他人开源的webui,可以参考datax-webui基于插件式的单机数据同步Apache-2.0 license




发布于 2024-05-07 12:47・IP 属地北京