Apache Camel K 介绍

news/2024/12/23 3:53:57/

Apache Camel K

  • Apache Camel K
    • Camel 是什么
    • Camel K 是什么
    • 为什么需要 Camel K
      • FaaS ,让用户集中于核心业务逻辑
      • 充分利用 Kubernetes 的特性
      • 自动选择合适的资源
    • Camel K 与 Camel (SpringBoot) 对比
    • Camel K 相关概念
      • Platform
      • Kit
      • Integration
      • kamel
    • Camel K 运行机制
  • Camel K Platform 部署
    • 部署环境需求
      • Kubernetes
      • Registry
    • 源码构建环境需求
    • CI/CD 需求
      • 脚本大致思路
    • Camel 监控
  • Camel K 使用相关
    • 个人建议项目结构
    • 示例:通过 kamel 部署集成代码

Apache Camel K

Camel 是什么

GitHub: https://github.com/apache/camel

Apache Camel 是一款开源集成框架,通过这一框架能够快速的集成各类数据格式不同的生产或消费数据的系统。

  • Camel 对大部分 EIP(Enterprise Integration Pattren,企业集成模式)提供了相关的实现
  • Camel 包含了数百种组件,能够访问各种数据库、消息中间件、API 等,几乎支持任何通信方式
  • Camel 支持大约 50 种数据格式,能够将数据转换成多种不同的格式,涵盖了金融、电信、医疗保险等行业标准格式的支持
  • Camel 能够独立运行,也能嵌入已有的系统中,或者基于微服务架构,甚至以 Serverless 的方式运行

示例:每 30 秒发送一条 Camel K RocketMQ Sample 到指定的 RocketMQ ,并输出日志。

import org.apache.camel.builder.RouteBuilder;public class SampleRocketMQ extends RouteBuilder {@Overridepublic void configure() throws Exception {from("timer:send?period=30000").process(exchange -> {exchange.getIn().setBody("Camel K RocketMQ Sample".getBytes());}).to("rocketmq:camel_k_sample?namesrvAddr=rpi3.lo:9876&producerGroup=camel_k_producer").to("log:camel_k_sample_rocketmq?showAll=true");}
}

Camel K 是什么

GitHub: https://github.com/apache/camel-k

Apache Camel K 是基于 Apache Camel 构建,运行在 Kubernetes 上的 Serverless 架构的轻量级集成平台。

用户可以立即在部署好的 Camel K Platform 上运行 Camel DSL 编写的集成代码。

为什么需要 Camel K

FaaS ,让用户集中于核心业务逻辑

用户只需专注于集成逻辑的开发,无需再考虑 Gradle 脚本编写、SpringBoot 版本选择等琐碎的事情。

充分利用 Kubernetes 的特性

故障迁移、资源调度、资源隔离……

自动选择合适的资源

Camel K 能够根据运行的集成代码选择合适的 K8S 资源,例如:

  • 当集成代码中的 timer 周期不小于 60s 的时候,Camel K 会部署一个 Cron schedule,而不是一直运行一个 Pod
  • 当检测到集成代码包含 HTTP 消费者时,会自动暴露端口并创建对应的 Service
  • ……

Camel K 与 Camel (SpringBoot) 对比

Camel KCamel (SpringBoot)
项目结构主要包含集成代码文件、集成代码单元测试的 Java 工程完整的 (SpringBoot) Java 工程
部署流程上传集成代码文件 或 指定 URL编译、jar、(构建镜像)部署
部署时间秒级分钟级
启动时间秒级1 分钟左右
资源占用相对较低,可根据集成类型分配资源相对较高,持续占用

Camel K 相关概念

Platform

Camel K 平台实例,本质上是一个 Operator。

camel-k-operator 的职责:

  • Kit 管理,包括构建、查询、删除等
  • Integration 管理,包括创建、删除、查询、更新

camel-k CRD:

NAME                                       SHORTNAMES   APIGROUP                       NAMESPACED   KIND
builds                                                  camel.apache.org               true         Build
camelcatalogs                              cc           camel.apache.org               true         CamelCatalog
integrationkits                            ik           camel.apache.org               true         IntegrationKit
integrationplatforms                       ip           camel.apache.org               true         IntegrationPlatform
integrations                               it           camel.apache.org               true         Integration

Kit

Kit 对应 Docker image,是运行 Camel 的基础镜像。
包含一个 Camel K Runtime 运行环境及第三方依赖,不包含集成代码。

默认的 Kit 仅包含了 Camel 的核心文件,只能使用一些基本的组件,所以需要根据集成代码的依赖构建各种 Kit。

如果有集成代码依赖了 RocketMQ,则可以构建一个名为 kit-rocketmq 的 Kit,
提供给使用了 RocketMQ 的集成代码在 Camel K 平台上运行。

Integration

Integration 对应 Deployment(或 Cron Schedule 等其他资源),所用的 image 就是上一节提到的 Kit,
一组集成代码文件被挂载到 Pod 中,经过 Camel K Runtime 动态编译运行。

kamel

Camel K 的 CLI 客户端。

主要功能:

  • Camel K Platform 管理(安装、卸载、重置)
  • 运行集成代码
  • Kit 管理
  • Integration 管理
Apache Camel K is a lightweight integration platform, born on Kubernetes, with serverless
superpowers.Usage:kamel [command]Available Commands:completion  Generates completion scriptsdelete      Delete integrations deployed on Kubernetesdescribe    Describe a resourceget         Get integrations deployed on Kuberneteshelp        Help about any commandinit        Initialize empty Camel K filesinstall     Installs Camel K on a Kubernetes clusterkit         Configure an Integration Kitlog         Print the logs of an integrationrebuild     Clear the state of integrations to rebuild themreset       Reset the Camel K installationrun         Run a integration on Kubernetesuninstall   Uninstall Camel K from a Kubernetes clusterversion     Display client versionFlags:--config string      Path to the config file to use for CLI requests-h, --help               help for kamel-n, --namespace string   Namespace to use for all operationsUse "kamel [command] --help" for more information about a command.

Camel K 运行机制

执行 kamel run Sample.java 运行集成代码后
Camel K 运行机制

Camel K Platform 部署

部署环境需求

Kubernetes

运行 Camel K 的基础

Registry

Camel K Operator 在构建 Kit 后,会将 Kit 对应的 Docker image 推到 Registry 上备用

源码构建环境需求

由于上一版本 camel-k:1.0.0-RC2 存在一些问题,新的 Release 尚未发布,
开发者在 Issue 中建议从 master 分支构建 camel-k。

构建源码需要以下环境:

  • Golang 1.13+
  • Operator SDK v0.9.0+ 用于构建 Operator 和 Docker 镜像,GitHub地址:https://github.com/operator-framework/operator-sdk ,Release 页面有直接可用的二进制可执行文件下载
  • GNU Make
  • JDK 1.8+ 用于构建 Camel 项目本身,目前 master 分支可以使用 Java 11
  • Docker 17.03+
  • kubectl v1.12.0+ 除了客户端,当然还要有可用的 Server

CI/CD 需求

目前 Camel K 运行集成代码的方式是通过 CLI 工具 kamel,但将可以操作 K8S 的服务器权限开放给开发人员不太合适,
因此需要寻求一种合适 Camel K 的部署方式。

可以考虑通过 Jenkins 配置 Camel K 集成代码部署脚本,封装 kamel 命令。

脚本大致思路

  1. git clone /path/to/repository
  2. kamel run $(cat enable_routes)

Camel 监控

Camel K 官方文档:https://camel.apache.org/camel-k/latest/traits/jolokia.html

Camel K 特性包括了 Jolokia,结合 Hawtio 可以实现 Camel 可视化。

hawtio

Camel K 使用相关

个人建议项目结构

camel-k-integration/
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── enable_routes
├── settings.gradle
└── src├── main│   ├── java│   │   ├── HttpRoute.java│   │   └── org│   │       └── example│   │           └── camel│   │               └── SampleRoute.java│   └── resources└── test├── java│   └── org│       └── example│           └── camel│               └── SampleRouteTest.java└── resources

enable_routes 文件中存放需要运行的集成代码文件列表:

src/main/java/org/example/camel/SampleRoute.java
src/main/java/HttpRoute.java

示例:通过 kamel 部署集成代码

examples/SampleRocketMQ.java

import org.apache.camel.builder.RouteBuilder;public class SampleRocketMQ extends RouteBuilder {@Overridepublic void configure() throws Exception {from("timer:send?period=30000").process(exchange -> {exchange.getIn().setBody("Camel K RocketMQ Sample".getBytes());}).to("rocketmq:camel_k_sample?namesrvAddr=rpi3.lo:9876&producerGroup=camel_k_producer").to("log:camel_k_sample_rocketmq?showAll=true");}
}

执行命令

kamel run examples/SampleRocketMQ.java -d mvn:vip.wuweijie.camel:camel-rocketmq:3.2.0-0.0.2 -n camel-k --name camel-k-rocketmq

Rancher

Pod 日志:

2020-04-21 15:46:38.566 INFO  [main] LRUCacheFactory - Detected and using LURCacheFactory: camel-caffeine-lrucache
2020-04-21 15:46:38.631 INFO  [main] ApplicationRuntime - Add listener: org.apache.camel.k.listener.RuntimeConfigurer@25bfcafd
2020-04-21 15:46:38.632 INFO  [main] ApplicationRuntime - Add listener: org.apache.camel.k.listener.ContextConfigurer@71454b9d
2020-04-21 15:46:38.632 INFO  [main] ApplicationRuntime - Add listener: org.apache.camel.k.listener.RoutesConfigurer@2fc6f97f
2020-04-21 15:46:38.633 INFO  [main] ApplicationRuntime - Add listener: org.apache.camel.k.listener.RoutesDumper@2d6764b2
2020-04-21 15:46:38.633 INFO  [main] ApplicationRuntime - Add listener: org.apache.camel.k.listener.PropertiesFunctionsConfigurer@6399551e
2020-04-21 15:46:38.636 INFO  [main] ApplicationRuntime - Listener org.apache.camel.k.listener.RuntimeConfigurer@25bfcafd executed in phase Starting
2020-04-21 15:46:38.640 INFO  [main] ApplicationRuntime - Listener org.apache.camel.k.listener.PropertiesFunctionsConfigurer@6399551e executed in phase Starting
2020-04-21 15:46:38.641 INFO  [main] BaseMainSupport - Using properties from:
2020-04-21 15:46:38.645 INFO  [main] RuntimeSupport - Looking up loader for language: java
2020-04-21 15:46:38.646 INFO  [main] RuntimeSupport - Found loader org.apache.camel.k.loader.java.JavaSourceLoader@fade1fc for language java from service definition
2020-04-21 15:46:39.153 INFO  [main] RoutesConfigurer - Loading routes from: file:/etc/camel/sources/i-source-000/SampleRocketMQ.java?language=java
2020-04-21 15:46:39.153 INFO  [main] ApplicationRuntime - Listener org.apache.camel.k.listener.RoutesConfigurer@2fc6f97f executed in phase ConfigureRoutes
2020-04-21 15:46:39.187 INFO  [main] ApplicationRuntime - Listener org.apache.camel.k.listener.ContextConfigurer@71454b9d executed in phase ConfigureContext
2020-04-21 15:46:39.187 INFO  [main] AbstractCamelContext - Apache Camel 3.1.0 (CamelContext: camel-k) is starting
2020-04-21 15:46:39.189 INFO  [main] DefaultManagementStrategy - JMX is disabled
2020-04-21 15:46:39.190 INFO  [main] HeadersMapFactoryResolver - Detected and using HeadersMapFactory: camel-headersmap
2020-04-21 15:46:39.277 INFO  [main] AbstractCamelContext - StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by io.netty.util.internal.PlatformDependent0$1 (file:/deployments/dependencies/io.netty.netty-all-4.0.42.Final.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.PlatformDependent0$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
2020-04-21 15:46:39.388 INFO  [main] AbstractCamelContext - Route: route1 started and consuming from: timer://send
2020-04-21 15:46:39.395 INFO  [main] AbstractCamelContext - Total 1 routes, of which 1 are started
2020-04-21 15:46:39.395 INFO  [main] AbstractCamelContext - Apache Camel 3.1.0 (CamelContext: camel-k) started in 0.208 seconds
2020-04-21 15:46:39.395 INFO  [main] ApplicationRuntime - Listener org.apache.camel.k.listener.RoutesDumper@2d6764b2 executed in phase Started
2020-04-21 15:46:40.463 INFO  [NettyClientPublicExecutor_1] camel_k_sample_rocketmq - Exchange[Id: ID-camel-k-rocketmq-8596f966c9-95hrq-1587484000450-0-1, ExchangePattern: InOnly, Properties: {CamelTimerCounter=1, CamelTimerFiredTime=Tue Apr 21 15:46:40 GMT 2020, CamelTimerName=send, CamelTimerPeriod=30000, CamelToEndpoint=log://camel_k_sample_rocketmq?showAll=true}, Headers: {firedTime=Tue Apr 21 15:46:40 GMT 2020}, BodyType: byte[], Body: Camel K RocketMQ Sample]
2020-04-21 15:47:10.398 INFO  [NettyClientPublicExecutor_1] camel_k_sample_rocketmq - Exchange[Id: ID-camel-k-rocketmq-8596f966c9-95hrq-1587484000450-0-2, ExchangePattern: InOnly, Properties: {CamelTimerCounter=2, CamelTimerFiredTime=Tue Apr 21 15:47:10 GMT 2020, CamelTimerName=send, CamelTimerPeriod=30000, CamelToEndpoint=log://camel_k_sample_rocketmq?showAll=true}, Headers: {firedTime=Tue Apr 21 15:47:10 GMT 2020}, BodyType: byte[], Body: Camel K RocketMQ Sample]

http://www.ppmy.cn/news/420176.html

相关文章

stc15w4k32s4芯片引脚图片_STC15W4K32S4系列

特性: 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051 工作电压:5.5V - 2.5V 16K/32K/40K/48K/56K/58K/61K/63.5K字节片Flash程序存储器,擦写次数10万次以上 片内大容量4096字节的RAM,包括常规的256字节RAM (data) 和扩展的3840字节XRAM(xdata) 大容量…

K-means聚类分析

实验目的: 学习聚类分析,以K-means算法为例。 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的&#xff0…

matlab编写k均值算法,K均值聚类算法的MATLAB实现 - 全文

K-means算法是最简单的一种聚类算法。算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准) K-means聚类算法的一般步骤: 初始化。输入基因表达矩阵作为对象集X,输入指定聚类类数N,并在X中随机选取N个对象作为初始聚类中心…

裸K交易法干货锦集

作者:老K日记(来自豆瓣) 来源:https://www.douban.com/note/745642472/ 01. 信号源 | Pinbar反转形态02. 信号源 | 假突破交易策略,比pinbar更强烈的信号03. 信号源 | inside bar04. 信号源 | Fakey “小骗子”05. 二次测试反转形…

S32K144(21)资源整理

刚拿到S32K144时候,内心是崩溃的,因为自己经验不足,面对这一种新出的芯片,资料如此稀缺的板子的时候,还是压力很大的 所以在这块板子,最开始的时候是最用心的,不管是S32DS还是参考手册的阅读&a…

我这样的都开了月薪21K,你们可以判断一下自己能拿多少

个人介绍: 首先介绍下我面试时的自身条件情况,我把自己的情况分为优势和劣势来说可能更有利于你们比较自身情况。 劣势: 1.15年7月毕业后开始到上海工作,面试的时候是17年3月到4月,一年多的经验,勉强算两…

ImageNet数据集处理(总结整理--待续)

1.简介 ImageNet图像数据集始于2009年,当时李飞飞教授等在CVPR2009上发表了一篇名为《ImageNet: A Large-Scale Hierarchical Image Database》的论文,之后就是基于ImageNet数据集的7届ImageNet挑战赛(2010年开始)。 数据下载:ImageNet&…

java版企业电子招投标采购系统源码之首页设计

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部…