SlideShare a Scribd company logo
~1 sec build and deploy on Kubernetes
Claus Ibsen
@davsclaus
@davsclaus
About me
● Senior Principal Software Engineer at Red Hat
● Java Champion
● 11 years as Apache Camel committer
● Author of Camel in Action books
● https://medium.com/@davsclaus
@davsclaus
Thanks for having me
Slides https://www.slideshare.net/davsclaus/apache-camel-k-copenhagen
@davsclaus
Agenda
● What is Apache Camel?
● Apache Camel v3
● Apache Camel K
● Quarkus & Camel
● Q & A
@davsclaus
System Integration
@davsclaus
Apache Camel
is an
Integration Framework
based on
Enterprise Integration Patterns
@davsclaus
Integration Framework
@davsclaus
Enterprise Integration Patterns
@davsclaus
Enterprise Integration Patterns
@davsclaus
Camel Routes
from("file:data/inbox")
.to("jms:queue:order");
<route>
<from uri="file:data/inbox"/>
<to uri="jms:queue:order"/>
</route>
Java DSL
XML DSL
@davsclaus
Camel Routes with Splitter
@davsclaus
Camel Routes with Splitter
from("file:inbox")
@davsclaus
Camel Routes with Splitter
from("file:inbox")
.split(body().tokenize("n"))
@davsclaus
Camel Routes with Splitter
from("file:inbox")
.split(body().tokenize("n"))
.marshal(customToXml)
Custom data
transformation
@davsclaus
Camel Routes with Splitter
from("file:inbox")
.split(body().tokenize("n"))
.marshal(customToXml)
.to("activemq:line"); Custom data
transformation
@davsclaus
Camel Architecture
@davsclaus
Camel runs everywhere
Application
Servers
Linux
Containers
@davsclaus
Runs on popular Java Runtimes
@davsclaus
Camel connects everything
Enterprise
Systems
● File
● FTP
● JMS
● AMQP
● JDBC
● SQL
● TCP/UDP
● Mail
● HDFS
● JPA
● MongoDB
● Kafka
● ...
Public Cloud
● AWS
○ S3
○ SQS
○ Kinesis
○ ...
● Google
○ BigQuery
○ PubSub
● Azure
○ Blob
○ Queue
● Box
● Dropbox
● Facebook
● Linkedin
● Salesforce
● SAP
● ServiceNowIoT
● CoAP
● MQTT
● PubNub
SaaS
@davsclaus
300+ Components
ahc ahc-ws amqp apns as2 asn1 asterisk atmos atmosphere-websocket atom atomix avro aws aws-xray azure bam barcode base64
beanio beanstalk bean-validator bindy blueprint bonita boon box braintree cache caffeine cassandraql castor cdi chronicle chunk cmis
cm-sms coap cometd consul context corda core-osgi core-xml couchbase couchdb crypto crypto-cms csv cxf cxf-transport
digitalocean disruptor dns docker dozer drill dropbox eclipse ehcache ejb elasticsearch elasticsearch5 elasticsearch-rest elsql etcd
eventadmin exec facebook fastjson fhir flatpack flink fop freemarker ftp ganglia geocoder git github google-bigquery google-calendar
google-drive google-mail google-pubsub google-sheets gora grape groovy groovy-dsl grpc gson guava-eventbus guice hawtdb
hazelcast hbase hdfs hdfs2 headersmap hessian hipchat hl7 http http4 http-common hystrix ibatis ical iec60870 ignite infinispan
influxdb ipfs irc ironmq jackson jacksonxml jasypt javaspace jaxb jbpm jcache jclouds jcr jdbc jetty jetty9 jetty-common jgroups jibx
jing jira jms jmx johnzon jolt josql jpa jsch jsonpath json-validator jt400 juel jxpath kafka kestrel krati kubernetes kura ldap ldif leveldb
linkedin lra lucene lumberjack lzf mail master metrics micrometer milo mina mina2 mllp mongodb mongodb3 mongodb-gridfs mqtt
msv mustache mvel mybatis nagios nats netty netty4 netty4-http netty-http nsq ognl olingo2 olingo4 openshift openstack opentracing
optaplanner paho paxlogging pdf pgevent printer protobuf pubnub quartz quartz2 quickfix rabbitmq reactive-streams reactor restlet
rest-swagger ribbon rmi routebox rss ruby rx rxjava2 salesforce sap-netweaver saxon scala schematron scr script service servicenow
servlet servletlistener shiro sip sjms sjms2 slack smpp snakeyaml snmp soap solr spark spark-rest splunk spring spring-batch spring-
boot spring-cloud spring-cloud-consul spring-cloud-netflix spring-cloud-zookeeper spring-integration spring-javaconfig spring-ldap
spring-redis spring-security spring-ws sql ssh stax stomp stream stringtemplate swagger swagger-java syslog tagsoup tarfile telegram
test test-blueprint test-cdi testcontainers testcontainers-spring test-karaf testng test-spring thrift tika twilio twitter undertow univocity-
parsers urlrewrite velocity vertx weather web3j websocket wordpress xchange xmlbeans xmljson xmlrpc xmlsecurity xmpp xstream
yammer yql zendesk zipfile zipkin zookeeper zookeeper-master
@davsclaus
A little Camel Example
@davsclaus 22
@davsclaus 23
@davsclaus 24
@davsclaus 25
@davsclaus 26
@davsclaus 27
@davsclaus 28
@davsclaus 29
kamel run file-copier.js
K
A little Camel K example
@davsclaus
@davsclaus
+
@davsclaus
+
+
@davsclaus
+
+
+
@davsclaus
+
+
+
=
@davsclaus
Camel Community in Numbers
● Created in 2007
● 139 Releases
● 473 Contributors on github
● ~ 2500 stars ⭐️ on github (a star is appreciated)
● ~ 36000 commits on master branch (~ 3000/year - 8/day)
● ~ 8600 Q&A on stackoverflow
● ~ 500 users on gitter chat
● 552 follows on twitter (https://twitter.com/apachecamel)
@davsclaus
@davsclaus
The good, bad & ugly
● Huge and active community
● Continued and stable release cadence
● Open and welcoming community (we love contributions)
● Burden on core developers
● Well established and "old project" may not appear to hipsters
● Balance of "keep as-is" vs "modernize" architecture
● The outdated website
(new site under development: https://camel.apache.org/staging)
@davsclaus
Apache Camel 3
3
@davsclaus
Camel 3 Timeline
● 3.0 Milestone 1 - February 2019
● 3.0 Milestone 2 - March 2019
● 3.0 Milestone 3 - May 2019
● 3.0 Milestone 4 - July 2019
● 3.0 GA - September 2019
● v3.0 Basic Features
● v3.1 Postponed Features
● v3.2 Postponed Features
● ...
Timeboxed
Schedule
@davsclaus
Camel 3 Major Goals
● Backwards compatible (minimal migration for normal use-cases)
● Light-weight & modular camel-core
● Reactive routing engine (non blocking & back-pressure)
● Tidy up APIs & cleanup of technical debt
● Fluent Builder Endpoint configuration (Java & XML)
● Java 8 DSL improvements
● New Cloud EIP Patterns
@davsclaus
Camel 3 Major Goals
● Apache Camel K
● GraalVM/Quarkus Support
● Timeboxed Release
● New website & documentation
● More presence on social/workshop/blog posts
● There is still a lot of unexpressed potential
@davsclaus
Camel 3 Milestone 1
● Released on February 22th 2019
● Migration Guide (work in progress)
https://github.com/apache/camel/blob/master/MIGRATION.md
● Example of migrating Camel in Action 2nd source code
https://github.com/camelinaction/camelinaction2/compare/camel3m1
@davsclaus
Camel 3 Milestone 1
● Modularization of camel-core
○ camel-api API for end users
○ camel-base Internal
○ camel-core Just like Camel 2.x
○ camel-management-api API for JMX management
○ camel-management-impl JMX is optional
○ camel-support API and support classes for end
users / components
○ camel-util General small utilities
○ camel-util-json Internal (Camel tooling and such)
○ camel-core-xml XML DSL support
○ camel-core-osgi OSGi support (no longer in camel-
core)
Mock
Component still
in camel-core
We will attempt to
move it out in M3
@davsclaus
Camel 3 Milestone 1
● Modularization of camel-core
@davsclaus
Camel 3 Milestone 1
● Reactive Core (internal)
@davsclaus
Camel 3 Milestone 1
● Reactive Core
○ All EIPs now fully reactive
○ Blocking vs Non-Blocking code-paths merged into one (Non-Blocking)
● Reactive Core (todo)
○ Backpressure (M3)
○ Client API (M3)
○ Java 9+ Flowable API (M3)
■ M1/M2 currently Java 8
○ Component metadata
■ To know if a component is fully reactive
● Vert.X (todo 3.1/3.2)
○ Better camel-vertx integration
■ To use its fully reactive components
Not all Camel
components are
100% reactive
compliant
@davsclaus
Camel 3 Milestone 1
● Tidy up API and clean technical debt
○ All deprecated code and components removed
○ Some APIs tidied up
...More internal cleanup on the way (M2/M3)
● camel-core-osgi
○ Upgraded to OSGi R6
● camel-activemq
○ Apache ActiveMQ 5.x (do not use activemq-camel)
@davsclaus
Camel 3 Milestone 1
● Improve project build
○ Faster build and re-build of project
○ More source generation of metadata and other files
○ … more to come in M2
● Apache Camel K
○ Camel K 0.3.0 supports
■ Camel 2.x
■ Camel 3 milestone 1
@davsclaus
Camel 3 Milestone 2
● Released on March 31th 2019
● Migration Guide (work in progress)
https://github.com/apache/camel/blob/master/MIGRATION.md
● Example of migrating Camel in Action 2nd source code
https://github.com/camelinaction/camelinaction2/compare/camel3m2
@davsclaus
Camel 3 Milestone 2
● Tidy up API and clean technical debt
○ All deprecated code and components removed
○ Some APIs tidied up
...More internal cleanup on the way (M3)
● Optimized type converters
○ Invoke type converter directly (no reflection method call)
○ Optimized type converter discovery and loading on startup
○ Allows pre-load with GraalVM/Quarkus
@davsclaus
Camel 3 Milestone 2
● Properties component
○ Fallback to lookup property as OS ENV variable
○ To work better with Kubernetes / Camel K
● Camel Main
○ More functionality out of the box
■ dependency injection (IoC) with camel-core Java (RouteBuilder classes)
■ dependency injection (IoC) with camel-spring Java
○ Convention over configuration out of the box
■ application.properties
○ To work better with Camel K
@davsclaus
Camel 3 Milestone 2
● Writeable registry
○ bind beans to registry
camelContext().getRegistry().bind("myName", myBean);
bindToRegistry("myName", myBean); (in RouteBuilder)
@BindToRegistry
○ Easier unit testing
○ Easier Camel standalone
● Step EIP
○ Group together EIPs (logic name)
○ Grouped performance statistics
@davsclaus
Camel 3 Milestone 2
● Quarkus/GraalVM Support
○ Works better with quarkus-camel
○ More minimal/optimized camel-core
○ Works better with Camel K
@davsclaus
Camel 3 Milestone 3
● camel-core-engine
○ Minimal set of dependency
● camel-mock
○ Move Mock out of camel-core (potentially not possible)
● camel-dataset
○ Move dataset & test component out of camel-core DONE
● camel-bean
○ Move Bean component / Language out of camel-core (likely not possible)
● camel-xml
○ Move all related to XML out of camel-core
@davsclaus
Camel 3 Milestone 3
● Quarkus/GraalVM Support
○ Generate additional metadata in JARs
○ Better integration with Quarkus
○ More minimal/optimized camel-core
○ Works better with Camel K
@davsclaus
Camel 3 Milestone 3
● Auto generated Endpoint DSL
○ Fluent Builders for endpoint in Java / XML
from(file("inbox").recursive().withDelay(2000))
.to(jms("cheese").withTimeToLive(5000));
<route>
<from>
<file directory="inbox" recursive="true" delay=”2000”/>
</from>
<to>
<jms queue="cheese" timeToLive="5000"/>
</to>
</route>
@davsclaus
Camel 3 Milestone 4
● Reactive Core
○ Backpressure
○ Client API
○ Flowable API (Java9+)
● Data Shape
○ IN vs OUT contract
■ Route
■ Component
○ Improved Data Mapping support
■ camel-atmasmap
@davsclaus
Camel 3 Milestone 4
● Java 11
○ Builds on Java 11
○ Java 8 to be dropped
● Stabilization and polish
○ Tidy up for GA release
● New website
○ Staging for preview
@davsclaus
Camel 3 - GA September 2019
Camel 3 is our
“Duke Nukem
Forever”
project 😁
@davsclaus
Apache Camel K
K
~1 sec build and deploy on Kubernetes
@davsclaus
Why Camel K
● Building and deploying Camel on Kubernetes
○ fabric8-maven-plugin to build the image
○ s2i on OpenShift to build the image
○ ci/cd pipeline (such as Jenkins) to build the image
● Minute(s) to build and deploy "Hello Camel"
We want to go faster
@davsclaus
Why Camel K
● Low-code / No-code integration
○ Engine in Red Hat Fuse Online
● Cloud Native Camel on Kubernetes
● Camel Serverless
Cloud Native Camel
on Kubernetes
@davsclaus
Why Camel K
● Quick Prototyping
● Simple or little business logic
● Tiny microservices
● Opinionated runtime
Not intended for traditional
bigger projects
-
Instead use regular Camel
@davsclaus
Limitations of Camel K
● Opinionated runtime
● Not a replacement for Apache Camel
● Must run on Kubernetes
● Testing framework currently limited
● Early project
... but Camel K has a lot of
potential
@davsclaus
Overview of Camel K
A lightweight platform for running Camel integration DSL in the cloud.
● Based on operator-sdk
● Works on Openshift and “vanilla” Kubernetes
$ kamel run routes.groovy --dev
from(“telegram:bots/bot-id”)
.transform()...
.to(“kafka:topic”);
from(“kafka:topic”)
.to(“http:my-host/api/path”);
File routes.groovy
Architecture of Camel K
Dev Environment Remote Cloud
kamel CLI
Camel K
Operator
“Integration”
Custom
Resource
Running Pod
Live updates!
Fast redeploy!
Less than 1 second!
Tailored for cloud-native development experience
Camel K in details
kind: Integration
apiVersion: camel.apache.org/v1alpha1
metadata:
name: my-integration
spec:
sources:
- name: source.groovy
content: |-
from(“telegram:...”)
.transform()...
.to(“kafka:...”)
from(“telegram:bots/bot-id”)
.transform()...
.to(“kafka:topic”);
from(“kafka:topic”)
.to(“http:my-host/api/path”);
This is what people care
about: Camel DSL
Camel K Operator
1. Choose a runtime
2. Create container image
3. Create Kubernetes
resources for deployment
kamel CLI
Camel K Resources Visualization
$ kamel run code.groovyfrom(“telegram:bots/bot-id”)
.transform()...
.to(“kafka:topic”);
from(“kafka:topic”)
.to(“http:my-host/api/path”);
File code.groovy
<<custom-resource>>
IntegrationPlatform
<<custom-resource>>
IntegrationContext
<<custom-resource>>
Integration
from(“telegram:..”)
.to(“...”)
BuildConfig
ImageStream
ImageStreamTag
Deployment
ConfigMap
from(“telegram:..”)
.to(“...”)
Pod
On OpenShift.
It uses Kaniko on
“vanilla” Kubernetes.
CRDs allow to abstract
from all this implementation
details!
Camel K Resources Visualization
$ kamel run code.groovyfrom(“telegram:bots/bot-id”)
.transform()...
.to(“kafka:topic”);
from(“kafka:topic”)
.to(“http:my-host/api/path”);
File code.groovy
<<custom-resource>>
IntegrationPlatform
<<custom-resource>>
IntegrationContext
<<custom-resource>>
Integration
from(“telegram:..”)
.to(“...”)
BuildConfig
ImageStream
ImageStreamTag
Deployment
ConfigMap
from(“telegram:..”)
.to(“...”)
Pod
On OpenShift.
It uses Kaniko on
“vanilla” Kubernetes.
Fast Deployment of Camel K
Time to run a integration using different strategies (in seconds)
Lower is better :)
F-m-p is the “fabric8-maven-plugin”
(http://maven.fabric8.io/) deploying a
average spring-boot based
integration on Minishift vs. a remote
OpenShift cluster (accounting time
to upload the fat Jar). Source S2I
build has been measured in Red Hat
Fuse Online.
@davsclaus
Demo Time
@davsclaus
Camel K
Demo
Let’s build a Telegram Chat Bot in few minutes.
You’ll need shortly on
your phone:
- Telegram App
- A QR Code reader
@davsclaus
Camel K
Demo
Let’s build a Telegram Chat Bot in few minutes.
@camelkbot
@davsclaus
What is Knative ?
@davsclaus
Build
A pluggable model for
building artifacts, like jar
files, zips or containers
from source code.
Knative Overview - Components
Serving
An event-driven model
that serves the container
with your application and
can "scale to zero".
Eventing
Common infrastructure for
consuming and producing
events that will stimulate
applications.
"...an extension to Kubernetes exposing building blocks to build modern, source-centric, and container-
based applications that can run anywhere".
@davsclaus
Knative Overview - Builds
● A Build is a list of containers run in-order, with source mounted in (TaskRun)
● BuildTemplates provide reusable, parameterized recipes that can be used to
create Builds (Task)
● Pipelines - The future!
○ Group of Tasks
● Build Example
● "Source to URL"
● S2I for OpenShift users
apiVersion: build.knative.dev/v1alpha1
kind: Build
metadata:
name: example-build
spec:
serviceAccountName: build-auth-example
source:
git:
url: https://github.com/example/build-example.git
revision: master
steps:
- name: centos-example
image: centos
args: ["centos-build-example", "SECRETS-example.md"]
steps:
- image: quay.io/example-builders/build-example
args: ['echo', 'hello-example', 'build']
@davsclaus
Knative Overview - Serving
● Configurations represent the ‘floating
HEAD’ of a history of Revisions
● Revisions represent immutable snapshot
of code and configuration
● Routes configure ingress over a collection
of Revisions and/or Configurations
● Services (nope, not K8s services) are top-
level controllers that manage a set of
Routes and Configurations to implement a
network service
Service
(my-function)
Route
(name) Configuration
Revision
Revision
Revision
manages
records
history of
10%
90%
@davsclaus
Knative Overview - Eventing
● Goal is to be a generalized eventing framework
● Many influencers also active on CloudEvents specification
Current-ish API:
● Receive Adapter triggers on EventSources that send Events to a
sink (channel)
● Channels are named endpoints which accept event delivery
(provided by Kafka, AMQP…)
● Subscriptions register to receive traffic from a Channel
@davsclaus
Knative Eventing - Pipeline
Knative Eventing Docs
@davsclaus
Knative Eventing - Flow
Knative Eventing Docs
@davsclaus
Again, beyond functions...
Keep code and configuration separate
Each configuration change triggers the creation
of new revision
Concurrency (scale out via process)
Disposability (fast startup/graceful shutdown)
Build, release, run (separate build and run stages)
https://12factor.net/
Configuration(configuration.serving.knative.dev)
Revision(revision.serving.knative.dev)
Route(route.serving.knative.dev)
Service(service.serving.knative.dev)
Build (buildtemplate.build.knative.dev)
@davsclaus
What about Camel & Knative ?
Camel K and Knative
<<custom-resource>>
Build
Knative building blocks relevance to Camel
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative Build
<<custom-resource>>
Service
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative Serving
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative
Eventing
Standardize building container images Auto-scaling and scale-to-zero Messaging for event-based applications
<<custom-resource>>
Channel
X
Camel K and Knative
<<custom-resource>>
Build
Knative building blocks relevance to Camel
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative Build
<<custom-resource>>
Service
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative Serving
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative
Eventing
Standardize building container images Auto-scaling and scale-to-zero Messaging for event-based applications
<<custom-resource>>
Channel
X
Camel K and Knative
<<custom-resource>>
Build
Knative building blocks relevance to Camel
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative Build
<<custom-resource>>
Service
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative Serving
<<custom-resource>>
...<<custom-resource>>
...<<custom-resource>>
...
Knative
Eventing
Standardize building container images Auto-scaling and scale-to-zero Messaging for event-based applications
<<custom-resource>>
Channel
X
Camel & Knative in details
kind: Integration
apiVersion: camel.apache.org/v1alpha1
metadata:
name: my-integration
spec:
sources:
- name: source.groovy
content: |-
from(“knative:channel/a”)
.to(“http:my-host/api/path”)
from(“knative:channel/a”)
.to(“http:my-host/api/path”);
Camel K Operator
Knative
profile?
kind: Service
apiVersion: serving.knative.dev/v1alpha1
yes
kind: Deployment
# standard one
no
Camel & Knative in details
$ kamel run code.groovy
from(“knative:channel/a”)
.transform()...
.to(“slack:#room”);
File code.groovy
<<custom-resource>>
Integration
from(“knative:channel/a”)
.to(“...”) <<custom-resource>>
Service
<<custom-resource>>
Channel
<<custom-resource>>
Subscription Pod Pod Pod
events
Same user experience!
Or even no pods!
In the knative profile, the
operator uses Knative
building blocks instead of a
standard Kubernetes
“Deployment”
Camel K: same model for different purposes
Camel K & Knative Eventing
Channel
Channel
Channel
Ext
System
Event
Source
EIP
Integration
Function
250+ components!
@davsclaus
Camel K and Knative - Links
● Apache Camel K
https://github.com/apache/camel-k
● Camel K Telegram Demo Code
https://github.com/nicolaferraro/camel-k-chuck-bot
● Camel K Introduction Blog
https://www.nicolaferraro.me/2018/10/15/introducing-camel-k
● Camel K and Knative tutorial
https://redhat-developer-demos.github.io/knative-tutorial/knative-tutorial-
camelk/v1.0.0/index.html
● Camel Knative Event Sources
https://github.com/knative/eventing-sources/tree/master/contrib/camel/samples
@davsclaus
Java Density Problem
CONTAINER ORCHESTRATION
Node Node Node
Traditional Cloud-Native
Java Stack
Traditional Cloud-Native
Java Stack
Traditional Cloud-Native
Java Stack
Traditional Cloud-Native
Java Stack
NodeJS
NodeJS
NodeJS
NodeJS
NodeJS
NodeJS
NodeJS
Go Go Go
Go Go Go
Go Go Go
Go Go Go
Go Go Go
Go Go Go
Go Go Go
https://developers.redhat.com/blog/2017/03/14/java-inside-docker/
SCALE-UP SCALE-DOWN SCALE-TO-
ZERO
Java Fast Scaling Problem
@davsclaus
Supersonic Subatomic Java
https://quarkus.io
@davsclaus
What is Quarkus
A Kubernetes Native Java stack tailored for
GraalVM & OpenJDK HotSpot, crafted from the
best of breed Java libraries and standards
@davsclaus
Minimal Footprint - Quarkus
● Minimal footprint Java applications
○ Native vs Quarkus+OpenJDK JVM vs Traditional JVM
@davsclaus
Container First - Quakrus
● First Class Support for Graal/SubstrateVM
○ Native compiled first-class supported
● Build Time Metadata Processing
○ Pre-Build and "warump" as much as possible during build time
● Reduction in Reflection Usage
○ Reduce startup and memory
● Native Image Pre Boot
○ Most of startup serialized into native image to startup even faster
https://quarkus.io/vision/container-first
@davsclaus
Programming Model - Quakrus
● Unifies imperative and reactive
@davsclaus
Developer Joy - Quarkus
● Unified configuration
● Zero config, live reload
● Streamlined code (80/20 rule)
● Native executable generation
@davsclaus
Standards - Quarkus
● CDI Dependency Injection
● JAX-RS REST
● JPA persistence
● JTA transactions
● Eclipse Microprofile configuration & monitoring
● Vert.X
● Apache Camel
● ... and more
https://quarkus.io/vision/standards
@davsclaus
Quarkus and Camel / Camel K
● Works with Camel K and regular Camel (3.x)
● Fast startup, low memory usage
● Compile Camel routes to native code (Camel K)
● Compile Camel projects to native code (Camel)
● Bring Camel to the serverless world
@davsclaus
Quarkus and Camel / Camel K
● Work to do
○ Quarkus Dev mode
○ More native Camel components
○ More camel-core optimizations
○ Better Camel and Quakrus integration
○ Better Camel and CDI with Quarkus
○ Native Compilation with GraalVM is not rock solid
@davsclaus
Demo Time
Apache Camel and Quarkus runs blazingly fast 🚀 with native compiled binaries.
Startup is 7 msec, 28mb binary file, and 15mb RSS memory used.
@davsclaus
Camel and Quarkus - Links
● Quarkus
https://quarkus.io
● Quarkus Camel Extensions
https://quarkus.io/extensions/#integration
https://github.com/quarkusio/quarkus/tree/master/extensions/camel
● Quarkus Camel Demo
https://github.com/quarkusio/quarkus-quickstarts/tree/master/camel-java
@davsclaus
Any Questions ?
🌍 http://www.davsclaus.com
@davsclaus
davsclaus
✉️ claus.ibsen@gmail.com

More Related Content

PDF
Camel Day Italia 2021 - Camel K
PPTX
Apache Camel K - Copenhagen
PDF
Solving PostgreSQL wicked problems
ODP
Stream processing using Kafka
PDF
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
PDF
MySQL InnoDB Cluster - Group Replication
PDF
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
PDF
How to set up orchestrator to manage thousands of MySQL servers
Camel Day Italia 2021 - Camel K
Apache Camel K - Copenhagen
Solving PostgreSQL wicked problems
Stream processing using Kafka
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
MySQL InnoDB Cluster - Group Replication
Disaster Recovery with MySQL InnoDB ClusterSet - What is it and how do I use it?
How to set up orchestrator to manage thousands of MySQL servers

What's hot (20)

PDF
Apache Camel v3, Camel K and Camel Quarkus
PPTX
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
PDF
Handle Large Messages In Apache Kafka
PDF
cLoki: Like Loki but for ClickHouse
PPTX
Apache Kafka Best Practices
PPTX
Apache Kafka
PDF
ProxySQL on Kubernetes
PPTX
「おうちクラウド」が今熱い!
PDF
Apache Kafka Architecture & Fundamentals Explained
PDF
From Mainframe to Microservice: An Introduction to Distributed Systems
PDF
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
PDF
OSMC 2022 | OpenTelemetry 101 by Dotan Horovit s.pdf
PDF
Kafka Streams: What it is, and how to use it?
PPTX
Evening out the uneven: dealing with skew in Flink
PDF
An Introduction to Apache Kafka
ODP
Openshift Container Platform
PPTX
Apache kafka
PDF
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
PDF
Untangling Cluster Management with Helix
PDF
Introduction to OpenStack
Apache Camel v3, Camel K and Camel Quarkus
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Handle Large Messages In Apache Kafka
cLoki: Like Loki but for ClickHouse
Apache Kafka Best Practices
Apache Kafka
ProxySQL on Kubernetes
「おうちクラウド」が今熱い!
Apache Kafka Architecture & Fundamentals Explained
From Mainframe to Microservice: An Introduction to Distributed Systems
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
OSMC 2022 | OpenTelemetry 101 by Dotan Horovit s.pdf
Kafka Streams: What it is, and how to use it?
Evening out the uneven: dealing with skew in Flink
An Introduction to Apache Kafka
Openshift Container Platform
Apache kafka
MySQL Database Architectures - InnoDB ReplicaSet & Cluster
Untangling Cluster Management with Helix
Introduction to OpenStack
Ad

Similar to Apache Camel K - Copenhagen v2 (20)

PPTX
Apache Camel K - Fredericia
PDF
State of integration with Apache Camel (ApacheCon 2019)
PDF
Cloud-Native Integration with Apache Camel on Kubernetes (Copenhagen October ...
PDF
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
PPTX
ApacheCon EU 2016 - Apache Camel the integration library
PDF
Apache Camel Introduction & What's in the box
PPTX
Integrating microservices with apache camel on kubernetes
PDF
Camel_From_The_Field
PPTX
Introduction to Apache Camel
ODP
Getting Started with Apache Camel at DevNation 2014
PDF
Getting started with Apache Camel - jDays 2013
ODP
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
PDF
Enterprise Integration Patterns with Apache Camel
PDF
Apache Camel - The integration library
ODP
Microservices with apache_camel_barcelona
ODP
Microservices with Apache Camel
PPTX
Apache Camel framework Presentation and selection of apache camel for various...
PPTX
Essential Camel Components
PDF
Apache Camel Introduction
PDF
OpenSouthCode 2018 - Integrating your applications easily with Apache Camel
Apache Camel K - Fredericia
State of integration with Apache Camel (ApacheCon 2019)
Cloud-Native Integration with Apache Camel on Kubernetes (Copenhagen October ...
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
ApacheCon EU 2016 - Apache Camel the integration library
Apache Camel Introduction & What's in the box
Integrating microservices with apache camel on kubernetes
Camel_From_The_Field
Introduction to Apache Camel
Getting Started with Apache Camel at DevNation 2014
Getting started with Apache Camel - jDays 2013
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Enterprise Integration Patterns with Apache Camel
Apache Camel - The integration library
Microservices with apache_camel_barcelona
Microservices with Apache Camel
Apache Camel framework Presentation and selection of apache camel for various...
Essential Camel Components
Apache Camel Introduction
OpenSouthCode 2018 - Integrating your applications easily with Apache Camel
Ad

More from Claus Ibsen (15)

PDF
Low Code Integration with Apache Camel.pdf
PDF
Camel JBang - Quarkus Insights.pdf
PDF
Integrating systems in the age of Quarkus and Camel
PDF
Camel Day Italy 2021 - What's new in Camel 3
PDF
DevNation Live 2020 - What's new with Apache Camel 3
PDF
Best Practices for Middleware and Integration Architecture Modernization with...
PPTX
Serverless integration with Knative and Apache Camel on Kubernetes
PDF
JEEConf 2018 - Camel microservices with Spring Boot and Kubernetes
PPTX
Camel riders in the cloud
PDF
Meetup Melbourne August 2017 - Agile Integration with Apache Camel microservi...
PDF
Developing Java based microservices ready for the world of containers
PDF
Developing Java based microservices ready for the world of containers
ODP
Developing Microservices with Apache Camel
PDF
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
ODP
Integration using Apache Camel and Groovy
Low Code Integration with Apache Camel.pdf
Camel JBang - Quarkus Insights.pdf
Integrating systems in the age of Quarkus and Camel
Camel Day Italy 2021 - What's new in Camel 3
DevNation Live 2020 - What's new with Apache Camel 3
Best Practices for Middleware and Integration Architecture Modernization with...
Serverless integration with Knative and Apache Camel on Kubernetes
JEEConf 2018 - Camel microservices with Spring Boot and Kubernetes
Camel riders in the cloud
Meetup Melbourne August 2017 - Agile Integration with Apache Camel microservi...
Developing Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containers
Developing Microservices with Apache Camel
Riga Dev Day 2016 - Microservices with Apache Camel & fabric8 on Kubernetes
Integration using Apache Camel and Groovy

Recently uploaded (20)

PDF
Salesforce Agentforce AI Implementation.pdf
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Digital Systems & Binary Numbers (comprehensive )
PDF
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
PDF
medical staffing services at VALiNTRY
PPTX
Advanced SystemCare Ultimate Crack + Portable (2025)
PDF
Cost to Outsource Software Development in 2025
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
DOCX
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
Patient Appointment Booking in Odoo with online payment
PDF
Complete Guide to Website Development in Malaysia for SMEs
PPTX
Transform Your Business with a Software ERP System
PDF
17 Powerful Integrations Your Next-Gen MLM Software Needs
PDF
iTop VPN Free 5.6.0.5262 Crack latest version 2025
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
Salesforce Agentforce AI Implementation.pdf
Reimagine Home Health with the Power of Agentic AI​
How to Choose the Right IT Partner for Your Business in Malaysia
Digital Systems & Binary Numbers (comprehensive )
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
medical staffing services at VALiNTRY
Advanced SystemCare Ultimate Crack + Portable (2025)
Cost to Outsource Software Development in 2025
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Greta — No-Code AI for Building Full-Stack Web & Mobile Apps
Odoo Companies in India – Driving Business Transformation.pdf
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
Design an Analysis of Algorithms II-SECS-1021-03
Patient Appointment Booking in Odoo with online payment
Complete Guide to Website Development in Malaysia for SMEs
Transform Your Business with a Software ERP System
17 Powerful Integrations Your Next-Gen MLM Software Needs
iTop VPN Free 5.6.0.5262 Crack latest version 2025
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx

Apache Camel K - Copenhagen v2

  • 1. ~1 sec build and deploy on Kubernetes Claus Ibsen @davsclaus
  • 2. @davsclaus About me ● Senior Principal Software Engineer at Red Hat ● Java Champion ● 11 years as Apache Camel committer ● Author of Camel in Action books ● https://medium.com/@davsclaus
  • 3. @davsclaus Thanks for having me Slides https://www.slideshare.net/davsclaus/apache-camel-k-copenhagen
  • 4. @davsclaus Agenda ● What is Apache Camel? ● Apache Camel v3 ● Apache Camel K ● Quarkus & Camel ● Q & A
  • 6. @davsclaus Apache Camel is an Integration Framework based on Enterprise Integration Patterns
  • 12. @davsclaus Camel Routes with Splitter from("file:inbox")
  • 13. @davsclaus Camel Routes with Splitter from("file:inbox") .split(body().tokenize("n"))
  • 14. @davsclaus Camel Routes with Splitter from("file:inbox") .split(body().tokenize("n")) .marshal(customToXml) Custom data transformation
  • 15. @davsclaus Camel Routes with Splitter from("file:inbox") .split(body().tokenize("n")) .marshal(customToXml) .to("activemq:line"); Custom data transformation
  • 18. @davsclaus Runs on popular Java Runtimes
  • 19. @davsclaus Camel connects everything Enterprise Systems ● File ● FTP ● JMS ● AMQP ● JDBC ● SQL ● TCP/UDP ● Mail ● HDFS ● JPA ● MongoDB ● Kafka ● ... Public Cloud ● AWS ○ S3 ○ SQS ○ Kinesis ○ ... ● Google ○ BigQuery ○ PubSub ● Azure ○ Blob ○ Queue ● Box ● Dropbox ● Facebook ● Linkedin ● Salesforce ● SAP ● ServiceNowIoT ● CoAP ● MQTT ● PubNub SaaS
  • 20. @davsclaus 300+ Components ahc ahc-ws amqp apns as2 asn1 asterisk atmos atmosphere-websocket atom atomix avro aws aws-xray azure bam barcode base64 beanio beanstalk bean-validator bindy blueprint bonita boon box braintree cache caffeine cassandraql castor cdi chronicle chunk cmis cm-sms coap cometd consul context corda core-osgi core-xml couchbase couchdb crypto crypto-cms csv cxf cxf-transport digitalocean disruptor dns docker dozer drill dropbox eclipse ehcache ejb elasticsearch elasticsearch5 elasticsearch-rest elsql etcd eventadmin exec facebook fastjson fhir flatpack flink fop freemarker ftp ganglia geocoder git github google-bigquery google-calendar google-drive google-mail google-pubsub google-sheets gora grape groovy groovy-dsl grpc gson guava-eventbus guice hawtdb hazelcast hbase hdfs hdfs2 headersmap hessian hipchat hl7 http http4 http-common hystrix ibatis ical iec60870 ignite infinispan influxdb ipfs irc ironmq jackson jacksonxml jasypt javaspace jaxb jbpm jcache jclouds jcr jdbc jetty jetty9 jetty-common jgroups jibx jing jira jms jmx johnzon jolt josql jpa jsch jsonpath json-validator jt400 juel jxpath kafka kestrel krati kubernetes kura ldap ldif leveldb linkedin lra lucene lumberjack lzf mail master metrics micrometer milo mina mina2 mllp mongodb mongodb3 mongodb-gridfs mqtt msv mustache mvel mybatis nagios nats netty netty4 netty4-http netty-http nsq ognl olingo2 olingo4 openshift openstack opentracing optaplanner paho paxlogging pdf pgevent printer protobuf pubnub quartz quartz2 quickfix rabbitmq reactive-streams reactor restlet rest-swagger ribbon rmi routebox rss ruby rx rxjava2 salesforce sap-netweaver saxon scala schematron scr script service servicenow servlet servletlistener shiro sip sjms sjms2 slack smpp snakeyaml snmp soap solr spark spark-rest splunk spring spring-batch spring- boot spring-cloud spring-cloud-consul spring-cloud-netflix spring-cloud-zookeeper spring-integration spring-javaconfig spring-ldap spring-redis spring-security spring-ws sql ssh stax stomp stream stringtemplate swagger swagger-java syslog tagsoup tarfile telegram test test-blueprint test-cdi testcontainers testcontainers-spring test-karaf testng test-spring thrift tika twilio twitter undertow univocity- parsers urlrewrite velocity vertx weather web3j websocket wordpress xchange xmlbeans xmljson xmlrpc xmlsecurity xmpp xstream yammer yql zendesk zipfile zipkin zookeeper zookeeper-master
  • 29. @davsclaus 29 kamel run file-copier.js K A little Camel K example
  • 35. @davsclaus Camel Community in Numbers ● Created in 2007 ● 139 Releases ● 473 Contributors on github ● ~ 2500 stars ⭐️ on github (a star is appreciated) ● ~ 36000 commits on master branch (~ 3000/year - 8/day) ● ~ 8600 Q&A on stackoverflow ● ~ 500 users on gitter chat ● 552 follows on twitter (https://twitter.com/apachecamel)
  • 37. @davsclaus The good, bad & ugly ● Huge and active community ● Continued and stable release cadence ● Open and welcoming community (we love contributions) ● Burden on core developers ● Well established and "old project" may not appear to hipsters ● Balance of "keep as-is" vs "modernize" architecture ● The outdated website (new site under development: https://camel.apache.org/staging)
  • 39. @davsclaus Camel 3 Timeline ● 3.0 Milestone 1 - February 2019 ● 3.0 Milestone 2 - March 2019 ● 3.0 Milestone 3 - May 2019 ● 3.0 Milestone 4 - July 2019 ● 3.0 GA - September 2019 ● v3.0 Basic Features ● v3.1 Postponed Features ● v3.2 Postponed Features ● ... Timeboxed Schedule
  • 40. @davsclaus Camel 3 Major Goals ● Backwards compatible (minimal migration for normal use-cases) ● Light-weight & modular camel-core ● Reactive routing engine (non blocking & back-pressure) ● Tidy up APIs & cleanup of technical debt ● Fluent Builder Endpoint configuration (Java & XML) ● Java 8 DSL improvements ● New Cloud EIP Patterns
  • 41. @davsclaus Camel 3 Major Goals ● Apache Camel K ● GraalVM/Quarkus Support ● Timeboxed Release ● New website & documentation ● More presence on social/workshop/blog posts ● There is still a lot of unexpressed potential
  • 42. @davsclaus Camel 3 Milestone 1 ● Released on February 22th 2019 ● Migration Guide (work in progress) https://github.com/apache/camel/blob/master/MIGRATION.md ● Example of migrating Camel in Action 2nd source code https://github.com/camelinaction/camelinaction2/compare/camel3m1
  • 43. @davsclaus Camel 3 Milestone 1 ● Modularization of camel-core ○ camel-api API for end users ○ camel-base Internal ○ camel-core Just like Camel 2.x ○ camel-management-api API for JMX management ○ camel-management-impl JMX is optional ○ camel-support API and support classes for end users / components ○ camel-util General small utilities ○ camel-util-json Internal (Camel tooling and such) ○ camel-core-xml XML DSL support ○ camel-core-osgi OSGi support (no longer in camel- core) Mock Component still in camel-core We will attempt to move it out in M3
  • 44. @davsclaus Camel 3 Milestone 1 ● Modularization of camel-core
  • 45. @davsclaus Camel 3 Milestone 1 ● Reactive Core (internal)
  • 46. @davsclaus Camel 3 Milestone 1 ● Reactive Core ○ All EIPs now fully reactive ○ Blocking vs Non-Blocking code-paths merged into one (Non-Blocking) ● Reactive Core (todo) ○ Backpressure (M3) ○ Client API (M3) ○ Java 9+ Flowable API (M3) ■ M1/M2 currently Java 8 ○ Component metadata ■ To know if a component is fully reactive ● Vert.X (todo 3.1/3.2) ○ Better camel-vertx integration ■ To use its fully reactive components Not all Camel components are 100% reactive compliant
  • 47. @davsclaus Camel 3 Milestone 1 ● Tidy up API and clean technical debt ○ All deprecated code and components removed ○ Some APIs tidied up ...More internal cleanup on the way (M2/M3) ● camel-core-osgi ○ Upgraded to OSGi R6 ● camel-activemq ○ Apache ActiveMQ 5.x (do not use activemq-camel)
  • 48. @davsclaus Camel 3 Milestone 1 ● Improve project build ○ Faster build and re-build of project ○ More source generation of metadata and other files ○ … more to come in M2 ● Apache Camel K ○ Camel K 0.3.0 supports ■ Camel 2.x ■ Camel 3 milestone 1
  • 49. @davsclaus Camel 3 Milestone 2 ● Released on March 31th 2019 ● Migration Guide (work in progress) https://github.com/apache/camel/blob/master/MIGRATION.md ● Example of migrating Camel in Action 2nd source code https://github.com/camelinaction/camelinaction2/compare/camel3m2
  • 50. @davsclaus Camel 3 Milestone 2 ● Tidy up API and clean technical debt ○ All deprecated code and components removed ○ Some APIs tidied up ...More internal cleanup on the way (M3) ● Optimized type converters ○ Invoke type converter directly (no reflection method call) ○ Optimized type converter discovery and loading on startup ○ Allows pre-load with GraalVM/Quarkus
  • 51. @davsclaus Camel 3 Milestone 2 ● Properties component ○ Fallback to lookup property as OS ENV variable ○ To work better with Kubernetes / Camel K ● Camel Main ○ More functionality out of the box ■ dependency injection (IoC) with camel-core Java (RouteBuilder classes) ■ dependency injection (IoC) with camel-spring Java ○ Convention over configuration out of the box ■ application.properties ○ To work better with Camel K
  • 52. @davsclaus Camel 3 Milestone 2 ● Writeable registry ○ bind beans to registry camelContext().getRegistry().bind("myName", myBean); bindToRegistry("myName", myBean); (in RouteBuilder) @BindToRegistry ○ Easier unit testing ○ Easier Camel standalone ● Step EIP ○ Group together EIPs (logic name) ○ Grouped performance statistics
  • 53. @davsclaus Camel 3 Milestone 2 ● Quarkus/GraalVM Support ○ Works better with quarkus-camel ○ More minimal/optimized camel-core ○ Works better with Camel K
  • 54. @davsclaus Camel 3 Milestone 3 ● camel-core-engine ○ Minimal set of dependency ● camel-mock ○ Move Mock out of camel-core (potentially not possible) ● camel-dataset ○ Move dataset & test component out of camel-core DONE ● camel-bean ○ Move Bean component / Language out of camel-core (likely not possible) ● camel-xml ○ Move all related to XML out of camel-core
  • 55. @davsclaus Camel 3 Milestone 3 ● Quarkus/GraalVM Support ○ Generate additional metadata in JARs ○ Better integration with Quarkus ○ More minimal/optimized camel-core ○ Works better with Camel K
  • 56. @davsclaus Camel 3 Milestone 3 ● Auto generated Endpoint DSL ○ Fluent Builders for endpoint in Java / XML from(file("inbox").recursive().withDelay(2000)) .to(jms("cheese").withTimeToLive(5000)); <route> <from> <file directory="inbox" recursive="true" delay=”2000”/> </from> <to> <jms queue="cheese" timeToLive="5000"/> </to> </route>
  • 57. @davsclaus Camel 3 Milestone 4 ● Reactive Core ○ Backpressure ○ Client API ○ Flowable API (Java9+) ● Data Shape ○ IN vs OUT contract ■ Route ■ Component ○ Improved Data Mapping support ■ camel-atmasmap
  • 58. @davsclaus Camel 3 Milestone 4 ● Java 11 ○ Builds on Java 11 ○ Java 8 to be dropped ● Stabilization and polish ○ Tidy up for GA release ● New website ○ Staging for preview
  • 59. @davsclaus Camel 3 - GA September 2019 Camel 3 is our “Duke Nukem Forever” project 😁
  • 60. @davsclaus Apache Camel K K ~1 sec build and deploy on Kubernetes
  • 61. @davsclaus Why Camel K ● Building and deploying Camel on Kubernetes ○ fabric8-maven-plugin to build the image ○ s2i on OpenShift to build the image ○ ci/cd pipeline (such as Jenkins) to build the image ● Minute(s) to build and deploy "Hello Camel" We want to go faster
  • 62. @davsclaus Why Camel K ● Low-code / No-code integration ○ Engine in Red Hat Fuse Online ● Cloud Native Camel on Kubernetes ● Camel Serverless Cloud Native Camel on Kubernetes
  • 63. @davsclaus Why Camel K ● Quick Prototyping ● Simple or little business logic ● Tiny microservices ● Opinionated runtime Not intended for traditional bigger projects - Instead use regular Camel
  • 64. @davsclaus Limitations of Camel K ● Opinionated runtime ● Not a replacement for Apache Camel ● Must run on Kubernetes ● Testing framework currently limited ● Early project ... but Camel K has a lot of potential
  • 65. @davsclaus Overview of Camel K A lightweight platform for running Camel integration DSL in the cloud. ● Based on operator-sdk ● Works on Openshift and “vanilla” Kubernetes $ kamel run routes.groovy --dev from(“telegram:bots/bot-id”) .transform()... .to(“kafka:topic”); from(“kafka:topic”) .to(“http:my-host/api/path”); File routes.groovy
  • 66. Architecture of Camel K Dev Environment Remote Cloud kamel CLI Camel K Operator “Integration” Custom Resource Running Pod Live updates! Fast redeploy! Less than 1 second! Tailored for cloud-native development experience
  • 67. Camel K in details kind: Integration apiVersion: camel.apache.org/v1alpha1 metadata: name: my-integration spec: sources: - name: source.groovy content: |- from(“telegram:...”) .transform()... .to(“kafka:...”) from(“telegram:bots/bot-id”) .transform()... .to(“kafka:topic”); from(“kafka:topic”) .to(“http:my-host/api/path”); This is what people care about: Camel DSL Camel K Operator 1. Choose a runtime 2. Create container image 3. Create Kubernetes resources for deployment kamel CLI
  • 68. Camel K Resources Visualization $ kamel run code.groovyfrom(“telegram:bots/bot-id”) .transform()... .to(“kafka:topic”); from(“kafka:topic”) .to(“http:my-host/api/path”); File code.groovy <<custom-resource>> IntegrationPlatform <<custom-resource>> IntegrationContext <<custom-resource>> Integration from(“telegram:..”) .to(“...”) BuildConfig ImageStream ImageStreamTag Deployment ConfigMap from(“telegram:..”) .to(“...”) Pod On OpenShift. It uses Kaniko on “vanilla” Kubernetes. CRDs allow to abstract from all this implementation details!
  • 69. Camel K Resources Visualization $ kamel run code.groovyfrom(“telegram:bots/bot-id”) .transform()... .to(“kafka:topic”); from(“kafka:topic”) .to(“http:my-host/api/path”); File code.groovy <<custom-resource>> IntegrationPlatform <<custom-resource>> IntegrationContext <<custom-resource>> Integration from(“telegram:..”) .to(“...”) BuildConfig ImageStream ImageStreamTag Deployment ConfigMap from(“telegram:..”) .to(“...”) Pod On OpenShift. It uses Kaniko on “vanilla” Kubernetes.
  • 70. Fast Deployment of Camel K Time to run a integration using different strategies (in seconds) Lower is better :) F-m-p is the “fabric8-maven-plugin” (http://maven.fabric8.io/) deploying a average spring-boot based integration on Minishift vs. a remote OpenShift cluster (accounting time to upload the fat Jar). Source S2I build has been measured in Red Hat Fuse Online.
  • 72. @davsclaus Camel K Demo Let’s build a Telegram Chat Bot in few minutes. You’ll need shortly on your phone: - Telegram App - A QR Code reader
  • 73. @davsclaus Camel K Demo Let’s build a Telegram Chat Bot in few minutes. @camelkbot
  • 75. @davsclaus Build A pluggable model for building artifacts, like jar files, zips or containers from source code. Knative Overview - Components Serving An event-driven model that serves the container with your application and can "scale to zero". Eventing Common infrastructure for consuming and producing events that will stimulate applications. "...an extension to Kubernetes exposing building blocks to build modern, source-centric, and container- based applications that can run anywhere".
  • 76. @davsclaus Knative Overview - Builds ● A Build is a list of containers run in-order, with source mounted in (TaskRun) ● BuildTemplates provide reusable, parameterized recipes that can be used to create Builds (Task) ● Pipelines - The future! ○ Group of Tasks ● Build Example ● "Source to URL" ● S2I for OpenShift users apiVersion: build.knative.dev/v1alpha1 kind: Build metadata: name: example-build spec: serviceAccountName: build-auth-example source: git: url: https://github.com/example/build-example.git revision: master steps: - name: centos-example image: centos args: ["centos-build-example", "SECRETS-example.md"] steps: - image: quay.io/example-builders/build-example args: ['echo', 'hello-example', 'build']
  • 77. @davsclaus Knative Overview - Serving ● Configurations represent the ‘floating HEAD’ of a history of Revisions ● Revisions represent immutable snapshot of code and configuration ● Routes configure ingress over a collection of Revisions and/or Configurations ● Services (nope, not K8s services) are top- level controllers that manage a set of Routes and Configurations to implement a network service Service (my-function) Route (name) Configuration Revision Revision Revision manages records history of 10% 90%
  • 78. @davsclaus Knative Overview - Eventing ● Goal is to be a generalized eventing framework ● Many influencers also active on CloudEvents specification Current-ish API: ● Receive Adapter triggers on EventSources that send Events to a sink (channel) ● Channels are named endpoints which accept event delivery (provided by Kafka, AMQP…) ● Subscriptions register to receive traffic from a Channel
  • 79. @davsclaus Knative Eventing - Pipeline Knative Eventing Docs
  • 80. @davsclaus Knative Eventing - Flow Knative Eventing Docs
  • 81. @davsclaus Again, beyond functions... Keep code and configuration separate Each configuration change triggers the creation of new revision Concurrency (scale out via process) Disposability (fast startup/graceful shutdown) Build, release, run (separate build and run stages) https://12factor.net/ Configuration(configuration.serving.knative.dev) Revision(revision.serving.knative.dev) Route(route.serving.knative.dev) Service(service.serving.knative.dev) Build (buildtemplate.build.knative.dev)
  • 83. Camel K and Knative <<custom-resource>> Build Knative building blocks relevance to Camel <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Build <<custom-resource>> Service <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Serving <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Eventing Standardize building container images Auto-scaling and scale-to-zero Messaging for event-based applications <<custom-resource>> Channel X
  • 84. Camel K and Knative <<custom-resource>> Build Knative building blocks relevance to Camel <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Build <<custom-resource>> Service <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Serving <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Eventing Standardize building container images Auto-scaling and scale-to-zero Messaging for event-based applications <<custom-resource>> Channel X
  • 85. Camel K and Knative <<custom-resource>> Build Knative building blocks relevance to Camel <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Build <<custom-resource>> Service <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Serving <<custom-resource>> ...<<custom-resource>> ...<<custom-resource>> ... Knative Eventing Standardize building container images Auto-scaling and scale-to-zero Messaging for event-based applications <<custom-resource>> Channel X
  • 86. Camel & Knative in details kind: Integration apiVersion: camel.apache.org/v1alpha1 metadata: name: my-integration spec: sources: - name: source.groovy content: |- from(“knative:channel/a”) .to(“http:my-host/api/path”) from(“knative:channel/a”) .to(“http:my-host/api/path”); Camel K Operator Knative profile? kind: Service apiVersion: serving.knative.dev/v1alpha1 yes kind: Deployment # standard one no
  • 87. Camel & Knative in details $ kamel run code.groovy from(“knative:channel/a”) .transform()... .to(“slack:#room”); File code.groovy <<custom-resource>> Integration from(“knative:channel/a”) .to(“...”) <<custom-resource>> Service <<custom-resource>> Channel <<custom-resource>> Subscription Pod Pod Pod events Same user experience! Or even no pods! In the knative profile, the operator uses Knative building blocks instead of a standard Kubernetes “Deployment”
  • 88. Camel K: same model for different purposes Camel K & Knative Eventing Channel Channel Channel Ext System Event Source EIP Integration Function 250+ components!
  • 89. @davsclaus Camel K and Knative - Links ● Apache Camel K https://github.com/apache/camel-k ● Camel K Telegram Demo Code https://github.com/nicolaferraro/camel-k-chuck-bot ● Camel K Introduction Blog https://www.nicolaferraro.me/2018/10/15/introducing-camel-k ● Camel K and Knative tutorial https://redhat-developer-demos.github.io/knative-tutorial/knative-tutorial- camelk/v1.0.0/index.html ● Camel Knative Event Sources https://github.com/knative/eventing-sources/tree/master/contrib/camel/samples
  • 91. Java Density Problem CONTAINER ORCHESTRATION Node Node Node Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack Traditional Cloud-Native Java Stack NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS NodeJS Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go Go https://developers.redhat.com/blog/2017/03/14/java-inside-docker/
  • 94. @davsclaus What is Quarkus A Kubernetes Native Java stack tailored for GraalVM & OpenJDK HotSpot, crafted from the best of breed Java libraries and standards
  • 95. @davsclaus Minimal Footprint - Quarkus ● Minimal footprint Java applications ○ Native vs Quarkus+OpenJDK JVM vs Traditional JVM
  • 96. @davsclaus Container First - Quakrus ● First Class Support for Graal/SubstrateVM ○ Native compiled first-class supported ● Build Time Metadata Processing ○ Pre-Build and "warump" as much as possible during build time ● Reduction in Reflection Usage ○ Reduce startup and memory ● Native Image Pre Boot ○ Most of startup serialized into native image to startup even faster https://quarkus.io/vision/container-first
  • 97. @davsclaus Programming Model - Quakrus ● Unifies imperative and reactive
  • 98. @davsclaus Developer Joy - Quarkus ● Unified configuration ● Zero config, live reload ● Streamlined code (80/20 rule) ● Native executable generation
  • 99. @davsclaus Standards - Quarkus ● CDI Dependency Injection ● JAX-RS REST ● JPA persistence ● JTA transactions ● Eclipse Microprofile configuration & monitoring ● Vert.X ● Apache Camel ● ... and more https://quarkus.io/vision/standards
  • 100. @davsclaus Quarkus and Camel / Camel K ● Works with Camel K and regular Camel (3.x) ● Fast startup, low memory usage ● Compile Camel routes to native code (Camel K) ● Compile Camel projects to native code (Camel) ● Bring Camel to the serverless world
  • 101. @davsclaus Quarkus and Camel / Camel K ● Work to do ○ Quarkus Dev mode ○ More native Camel components ○ More camel-core optimizations ○ Better Camel and Quakrus integration ○ Better Camel and CDI with Quarkus ○ Native Compilation with GraalVM is not rock solid
  • 103. Apache Camel and Quarkus runs blazingly fast 🚀 with native compiled binaries. Startup is 7 msec, 28mb binary file, and 15mb RSS memory used.
  • 104. @davsclaus Camel and Quarkus - Links ● Quarkus https://quarkus.io ● Quarkus Camel Extensions https://quarkus.io/extensions/#integration https://github.com/quarkusio/quarkus/tree/master/extensions/camel ● Quarkus Camel Demo https://github.com/quarkusio/quarkus-quickstarts/tree/master/camel-java
  • 105. @davsclaus Any Questions ? 🌍 http://www.davsclaus.com @davsclaus davsclaus ✉️ [email protected]

Editor's Notes

  • #6: Camel is not house-hold name, aka not well known like Apache Tomcat, Kafka etc. Camel is used for any kind of system integration
  • #9: Camel inspired by this book. Book published 13 years ago
  • #10: Universal patterns that are reusable for developers to use
  • #11: Very simple Camel route example
  • #12: Another example with a bit more where we pickup files, split the files line by line, and convert each line from a custom format to XML and send the Apache ActiveMQ
  • #13: Another example with a bit more where we pickup files, split the files line by line, and convert each line from a custom format to XML and send the Apache ActiveMQ
  • #14: Another example with a bit more where we pickup files, split the files line by line, and convert each line from a custom format to XML and send the Apache ActiveMQ
  • #15: Another example with a bit more where we pickup files, split the files line by line, and convert each line from a custom format to XML and send the Apache ActiveMQ
  • #16: Another example with a bit more where we pickup files, split the files line by line, and convert each line from a custom format to XML and send the Apache ActiveMQ
  • #17: Overall architecture of Apache Camel
  • #18: Where can you run Camel? Camel is a very lightweight integration framework / engine You can run Camel everywhere (Java) Camel was created 11 years ago (before cloud / linux containers) Back then typical deployment was using application servers (still a choice today) However cloud, docker and containers is the future direction
  • #20: Slides with connectors for various things Traditional / Legacy systems Public Cloud (the 3 big vendors, AWS, Google and MS Azure) SaaS (social media, salesforce and others) IoT (gateways to embedded devices)
  • #31: Summarize what Apache Camel is in "pictures"
  • #76: Knative can be defined as a set of extensions to Kubernetes that expose building blocks to build modern, container-based applications that run anywhere. It does that through 3 modules: Build, Serving and Events. Build define a set of APIs
  • #82: Disposability (Maximize robustness with fast startup and graceful shutdown)