Integrating systems

in the age of

Quarkus, Knative and Kafka

 

 

Peter Palaga
@ppalaga

Image from 1zoom.me

Peter Palaga

 

↘     ↙

Camel Quarkus

Image by Kaptain Kobold CC BY-NC-SA 2.0

Image by Anders Lanzen CC BY-NC-SA 2.0
Systems integration
Image by Aaron Hockley CC BY-NC-ND 2.0

350+ connectors

Filetypes:

  • Plaintext, XML, HTML, CSV, JSON, ZIP, ...
  • Apache Tika (MS Office, OpenDocument, ...)

Protocols:

  • TCP/UDP, DNS, FTP, HTTP, IRC, SSH, ...
  • REST, GRPC, git, ...
  • IoT: CoAP, MQTT, PubNub

Public/private Clouds:   

  • AWS: S3, SQS, Kinesis, ...
  • Azure: Blob, Queue, ...
  • Google: BigQuery, PubSub
  • DigitalOcean, Kubernetes, OpenShift, etcd, Docker

Data & messaging

  • Hazelcast, Infinispan, Redis, ...
  • Cassandra, MongoDB
  • JDBC, SQL, JPA
  • Kafka, Debezium
  • JMS, AMQP, QPID, STOMP

APIs:

  • Social: Facebook, Twitter, LinkedIn
  • Box, Dropbox, Google Calendar/Drive/Mail/Docs
  • Salesforce, SAP, ServiceNow, FHIR
  • GitHub, Jira, Telegram

Misc:

  • Barcode
  • Base64, JsonPath, Freemarker, Groovy, Mustache, Ruby
  • JMX, OpenTelemetry, OpenTracing, OptaPlanner, Syslog

Check the full list

Image by Jess Larson

Enterprise Integration Patterns (EIP)

EIPs
https://www.enterpriseintegrationpatterns.com/
Image by Gary Todd CC0 1.0

Domain Specific Languages (DSL)

Java XML
class MyCamelRouter extends RouteBuilder {
  @Override
  public void configure() throws Exception {
    from("aws2-s3://my-bucket?prefix=hello.txt")
      .log("Got an S3 file: ${body}")
      .to("telegram:bots");
  }
}
<routes
  xmlns="http://camel.apache.org/schema/spring">
  <route id="my-route">
    <from uri="aws2-s3://my-bucket?prefix=hello.txt"/>
    <log message="Got an S3 file: ${body}"/>
    <to uri="telegram:bots"/>
  </route>
</routes>

Groovy, Scala, Kotlin, YAML, ...

Image by Jason Mrachina CC BY-NC-ND 2.0

Ways to run Camel

 

Standalone
Quarkus Apache Karaf Knative/Kubernetes WildFly
Spring Boot Spring Boot Apache Karaf WildFly
Image from pxhere.com CC0 Public Domain

Camel on Quarkus

a build time toolkit

Image from tenor

Why Camel on Quarkus?

 

💾 Small size on disk Small container images
🚀 Fast boot time Instant scale up
🔬 Low memory footprint More containers with the same
amount of RAM
$ mvn compile quarkus:dev

Quarkus dev mode:                                  

  • Live reload
  • Dev services (via Testcontainers)
    • DBs, Kafka, Mock Mailer, ...
  • Continuous testing
  • DevUI
    • Swagger UI, GraphQL UI, Health UI


https://quarkus.io/guides/dev-mode-differences#dev-mode-features

Developer 😍

code.quarkus.io (with native support)
Camel Quarkus Docs (all)

Image adapted from Wikimedia Commons CC BY 4.0

Camel Quarkus Demo

Camel Quarkus demo

github.com/ppalaga/camel-quarkus-demo/tree/220927-sbb-dev-day

How can we deploy on Kubernetes?

Image by ??? ???

The Quarkus way

  • Build and push an image
    • quarkus-container-image-jib
    • quarkus-container-image-docker
    • quarkus-container-image-s2i

  • Generate Kubernetes resources
    • quarkus-kubernetes
    • quarkus-minikube
    • quarkus-openshift
    • quarkus-kubernetes-config

  • Knative/Serverless
    • quarkus-funqy-http
    • quarkus-funqy-knative-events


Watch Quarkus Insights #15: Kubernetes and OpenShift with Quarkus

Make it simpler!

Image by Anders Lanzen CC BY-NC-SA 2.0

Camel K overview

Image by CDC Public Domain

Camel K demo

Systems integration

Wrap up

  • Apache 🐪 = an integration toolkit with 350+ connectors
  • 🚀🔬😍 on Quarkus
  • Scale to 0️⃣ and easy to deploy to Knative
  • Stream data from/to Kafka

Camel Quarkus Workshop

BaselOne, Oct. 20, 2022

baselone.ch/speech.html?id=08CA4481-7EBE-44BF-B88E-5FEA9519FB18