Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apache Camel K - Fredericia

155 views

Published on

Camel K gå-hjem møde med Claus Ibsen

Published in: Software
  • Be the first to comment

Apache Camel K - Fredericia

  1. 1. ~1 sec build and deploy on Kubernetes Claus Ibsen @davsclaus
  2. 2. 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. 3. Thanks for having me
  4. 4. Agenda ● What is Apache Camel? ● Apache Camel v3 ● Apache Camel K ● Quarkus & Camel ● Q & A
  5. 5. System Integration
  6. 6. Apache Camel is an Integration Framework based on Enterprise Integration Patterns
  7. 7. Integration Framework
  8. 8. Enterprise Integration Patterns
  9. 9. Enterprise Integration Patterns
  10. 10. 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
  11. 11. Camel Routes with Splitter
  12. 12. Camel Routes with Splitter from("file:inbox")
  13. 13. Camel Routes with Splitter from("file:inbox") .split(body().tokenize("n"))
  14. 14. Camel Routes with Splitter from("file:inbox") .split(body().tokenize("n")) .marshal(customToXml) Custom data transformation
  15. 15. Camel Routes with Splitter from("file:inbox") .split(body().tokenize("n")) .marshal(customToXml) .to("activemq:line"); Custom data transformation
  16. 16. Camel Architecture
  17. 17. Camel runs everywhere Application Servers Linux Containers
  18. 18. Runs on popular Java Runtimes
  19. 19. 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. 20. 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
  21. 21. Demo Time
  22. 22. +
  23. 23. + +
  24. 24. + + +
  25. 25. + + + =
  26. 26. Camel Community in Numbers ● Created in 2007 ● 137 Releases ● 471 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 ● 538 follows on twitter (https://twitter.com/apachecamel)
  27. 27. 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 and documentation ( new site under development: https://camel.apache.org/staging )
  28. 28. Apache Camel 3 3
  29. 29. Camel 3 Timeline ● 3.0 Milestone 1 - February 2019 ● 3.0 Milestone 2 - March 2019 ● 3.0 Milestone 3 - May 2019 ● 3.0 Milestone 3 - July 2019 ● 3.0 GA - September 2019 ● v3.0 Basic Features ● v3.1 Postponed Features ● v3.2 Postponed Features ● Quicker Releases Timeboxed Schedule
  30. 30. 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
  31. 31. 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
  32. 32. 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
  33. 33. 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) ● camel-core-engine (M3) Mock Component still in camel-core We will attempt to move it out in M3
  34. 34. Camel 3 Milestone 1 ● Modularization of camel-core
  35. 35. Camel 3 Milestone 1 ● Reactive Core (internal)
  36. 36. 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
  37. 37. 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)
  38. 38. 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
  39. 39. Camel 3 Milestone 2 ● Released soon (in VOTE) ● 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
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. Camel 3 Milestone 2 ● Quarkus/GraalVM Support ○ Works better with quarkus-camel ○ More minimal/optimized camel-core ○ Works better with Camel K
  44. 44. Camel 3 Milestone 3 - TODO ● Quarkus/GraalVM Support ○ Generate additional metadata in JARs ○ Better integration with Quarkus ○ More minimal/optimized camel-core ○ Works better with Camel K
  45. 45. Camel 3 Milestone 3 - TODO ● camel-core-engine ○ Minimal set of dependency ● camel-mock ○ Move Mock out of camel-core (potentially not possible) ● camel-bean ○ Move Bean component / Language out of camel-core (likely not possible)
  46. 46. Camel 3 Milestone 3 - TODO ● Auto generated Endpoint DSL ○ Fluent Builders for endpoint in Java / XML
  47. 47. 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
  48. 48. 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
  49. 49. Camel 3 - GA September 2019 Camel 3 is our “Duke Nukem Forever” project 😁
  50. 50. Apache Camel K K ~1 sec build and deploy on Kubernetes
  51. 51. 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
  52. 52. 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
  53. 53. Why Camel K ● Quick Prototyping ● Simple or little business logic ● Tiny microservices ● Opinionated runtime Not intended for traditional bigger projects - Instead use regular Camel
  54. 54. 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
  55. 55. 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
  56. 56. Architecture of Camel K
  57. 57. Demo Time
  58. 58. Knative Kubernetes-based platform to build, deploy, and manage modern serverless workloads ● Serving ● Build ● Events Serving and Events are most relevant to Camel K
  59. 59. Knative Serving and Eventing Knative = Cloud ESB
  60. 60. Camel K and Knative Now part of Knative Camel K is Serverless: ● Autoscaling and scaling to zero (Knative Serving) ● Event-based communication (Knative eventing) ● CamelSources in Knative: https://github.com/knative/eventing- sources/tree/master/contrib/camel/samples +
  61. 61. 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
  62. 62. Camel K Demo Let’s build a Telegram Chat Bot in few minutes. @camelkbot
  63. 63. Camel K - 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/1.0- SNAPSHOT/camelk/intro.html
  64. 64. Supersonic Subatomic Java https://quarkus.io
  65. 65. What is Quarkus A Kubernetes Native Java stack tailored for GraalVM & OpenJDK HotSpot, crafted from the best of breed Java libraries and standards
  66. 66. Minimal Footprint - Quarkus ● Minimal footprint Java applications ○ Native vs Quarkus+OpenJDK JVM vs Traditional JVM
  67. 67. 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
  68. 68. Programming Model - Quakrus ● Unifies imperative and reactive
  69. 69. Developer Joy - Quarkus ● Unified configuration ● Zero config, live reload ● Streamlined code (80/20 rule) ● Native executable generation
  70. 70. 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
  71. 71. 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
  72. 72. 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
  73. 73. Demo Time
  74. 74. 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/gnodet/quarkus-quickstarts/tree/camel-quickstarts Camel Quickstart work-in-progress (will be merged to master later)
  75. 75. Q & A

×