SlideShare a Scribd company logo
© 2017 IBM Corporation
Edoardo Comar ecomar@uk.ibm.com
Andrew Schofield andrew_schofield@uk.ibm.com
IBM Message Hub
Kafka and the Polyglot Programmer
A brief overview of the Kafka clients ecosystem
© 2017 IBM Corporation
Session objectives
• Show some comparable Kafka usage from different languages
• Show a little of what goes underneath a Kafka client
• To appreciate the heavy lifting a client has to do
• We’ll proceed in reverse order though J
© 2017 IBM Corporation
How does an application talk to Kafka ?
• Protocol-level client libraries (implementing the Kafka “wire” API)
• The “official” Java client
• librdkafka C/C++ library and wrappers for other languages
• Other clients from a large open-source ecosystem
• Alternative “message-level” APIs
• Kafkacat, REST
• Higher-level APIs
• Kafka Connect, Kafka Streams
© 2017 IBM Corporation
What is the Kafka protocol (the ‘wire’ API) ?
• A set of Request/Response message pairs
• e.g.: ProduceRequest, ProduceResponse (ApiKey=0)
• A set of error codes
• e.g.: Unknown Topic Or Partition (code=3)
• Messages exchanged using Kafka’s own binary protocol
• Over TCP (or TLS)
• It’s not HTTP, AMQP, MQTT …
• All requests initiated by the clients.
• Brokers send Responses
© 2017 IBM Corporation
Kafka’s TCP binary protocol
• Open-source protocol (obviously!)
• Messages defined in terms of Serializable data structures
• Primitive types (intNN, nullable string) + Arrays
• Struct types, e.g.
RecordBatch for sequence of Records (key, value, metadata)
• Clients typically holds multiple long-lived TCP connections
• One per broker node
• Clients expected to use non-blocking I/O
http://kafka.apache.org/protocol
© 2017 IBM Corporation
Kafka message capture with Wireshark
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
© 2017 IBM Corporation
Anatomy of a wire message
Magic 1
(v.0.10.x)
© 2017 IBM Corporation
In 0.11 RecordBatch superseded MessageSet
• Magic value = 2
• Records have Headers (KIP-82)
• They look like footers 😀
• Metadata for Exactly-Once Semantics
• Space savings for large batches
https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+
Kafka+Protocol#AGuideToTheKafkaProtocol-Messagesets
© 2017 IBM Corporation
It’s an open Source protocol …
… so anyone can write a client, in any language ?
• In theory, yes
• In practice, it’s a very big investment
• A lot of intelligence goes in the client
• Partitioning
• Consumer Group assignment
• Complexity has grown a lot since 0.8 …
• Consumer group protocol
• Security protocols/SASL mechanisms
• KIP-4 (administrative actions)
• Exactly-Once Semantics
© 2017 IBM Corporation
The evolution of the Kafka API
Kafka
Version
released # of API Keys (RPCs) # of Error Codes
Including -1 UNKNOWN
0 NO_ERROR
0.7.2 Nov 2012 5 6
0.8.0 Nov 2013 8 13
0.9.0 Nov 2015 17 33
0.10.0 May 2016 19 37
0.10.2 Feb 2017 21 46
0.11.0 June 2017 33 55
• Brokers support older clients
• Recent clients support somewhat older brokers
© 2017 IBM Corporation
• Good support for the features of Apache Kafka
• Message keys, committing offsets, exactly-once semantics, ...
• Blending natural idioms of the language with proper use of Kafka
• Solid software engineering
• Responsive community support
• Native code or ‘pure’
• Particularly important in the cloud
• Does it support the technologies you have chosen to use?
• Message encoding, Schema Registry, ...
What makes for a good choice of client?
© 2017 IBM Corporation
Project Language Pure or native code
Apache Kafka client Java pure
librdkafka C / C++ –
node-kafka-native JavaScript (Node.js) native
node-rdkafka JavaScript (Node.js) native
confluent-kafka-go Go native
Sarama Go pure
kafkacat CLI / Shell scripts –
Confluent Kafka REST Any –
Let’s take a look at some different clients
© 2017 IBM Corporation
Java
producer
• Part of Apache Kafka
• Best for feature support and
performance
• Asynchronous with batching
• Highly configurable
• Rich metrics
https://kafka.apache.org/0110/javadoc/index.html
© 2017 IBM Corporation
• Part of Apache Kafka
• Best for feature support and
performance
• Single-threaded
• Polls for records and this is
also a liveness check
• Commits offsets
automatically, async or sync
Java
consumer
https://kafka.apache.org/0110/javadoc/index.html
© 2017 IBM Corporation
C / C++ librdkafka
• Fully featured native code Kafka client library
• Portable so supports Linux, MacOS, Windows and more
• Used as the basis for many other client libraries for other languages
• Does a good job of keeping track with the Kafka releases
• A bit tricky to build on platforms other than Linux if you want security
• SASL only recently supported on Windows
• SSL on Mac requires homebrew
• Can emit metrics
• At broker and topic-partition levels
https://github.com/edenhill/librdkafka
© 2017 IBM Corporation
• Concepts very similar to
Apache Kafka client
• But you have to manage
memory yourself
• Uses callbacks to report
status but you have to poll to
have them fire
C librdkafka
producer
© 2017 IBM Corporation
• This is the low-level consumer
interface
• The high-level one supports
consumer groups
• Thread-safe (unlike Java)
C librdkafka
consumer
© 2017 IBM Corporation
• Built on top of the C library
• Looks more similar to Java,
primarily because it’s object-
oriented
• Again, there’s a need to make
a regular call to respond to
callbacks
C++ librdkafka
consumer
© 2017 IBM Corporation
• Another Node.js module
wrapping librdkafka
• Looked promising but
ultimately not updated to
keep up with new features
• No updates for a long time
now
• Use node-rdkafka instead
https://github.com/alfred-landrum/node-kafka-native
JS node-kafka-native
© 2017 IBM Corporation
• Third-party Node.js module
wrapping librdkafka
• Natural Node.js style of event
delivery
• A good example of the
community working well
https://github.com/Blizzard/node-rdkafka
JS node-rdkafka
producer
© 2017 IBM Corporation
• Supports many of the
features of consuming such
as rebalancing, committing
offsets
• There’s also a streaming
interface
https://github.com/Blizzard/node-rdkafka
JS node-rdkafka
consumer
© 2017 IBM Corporation
confluent-kafka-go
producer
• Confluent Go client based on
librdkafka
• Two variants of producer
• Function-based
• Channel-based
• Delivery reports emitted on
Events channel
© 2017 IBM Corporation
• This variant of the API uses
polling and then a type switch
confluent-kafka-go
consumer
© 2017 IBM Corporation
• This variant of the API uses a
channel to deliver messages
and events such as rebalance
confluent-kafka-go
consumer
© 2017 IBM Corporation
• Third-party pure Go client
• Currently at 0.10.2.x level
Go Sarama
producer
https://shopify.github.io/sarama/
© 2017 IBM Corporation
• Consumer groups not
supported yet
• No offset tracking
• Available as 3rd party
extensions
Go Sarama
consumer
https://shopify.github.io/sarama/
© 2017 IBM Corporation
kafkacat
https://github.com/edenhill/kafkacat
• Command line
non-JVM
Kafka producer and
consumer
• Unsurprisingly, uses
librdkafka too
• Useful in shell scripts
and just for trying stuff
out on the command
line
© 2017 IBM Corporation
• Part of Confluent
Platform
• Integrated with
Schema Registry
• Use any language…
• A bit tricky to format
the data correctly
Confluent
Kafka REST
https://github.com/confluentinc/kafka-rest
© 2017 IBM Corporation
Do non-Java users face many issues?
• Most problems are conceptual
• Many new users struggle with the concepts of Kafka L
• Users assume it’s the same as traditional messaging systems
• Partitions, consumer groups, at-least-once semantics, ...
• Documentation nowadays is getting really good
• Historically, lack of best-practice examples in the various languages
• Handling expected errors properly is a common theme
• Failed commits, producer timeouts, ...
• Non-Java clients lag behind Java in features
• librdkafka doing a great job here, but dependent clients need to expose the
features
• Even more true for independent clients
© 2017 IBM Corporation
Summary
• Kafka has mature clients for several popular languages
• Java still gives the best experience
• librdkafka is delivering a solid base for non-Java clients
• At the expense of native code
• Some third-party ‘pure’ clients look good too
• But the community support needs to stay the course
© 2017 IBM Corporation
A few links
Kafka Protocol
http://kafka.apache.org/protocol
https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol
Kafka Clients directory
https://cwiki.apache.org/confluence/display/KAFKA/Clients
Code samples / modules
https://github.com/ibm-messaging/message-hub-samples
https://www.npmjs.com/package/message-hub-rest
http://docs.confluent.io/current/clients/index.html
© 2017 IBM Corporation
Q & A
Contact us through the Summit App or via email
ecomar@uk.ibm.com
andrew_schofield@uk.ibm.com
Thanks !

More Related Content

What's hot

Fundamentals and Architecture of Apache Kafka
Fundamentals and Architecture of Apache KafkaFundamentals and Architecture of Apache Kafka
Fundamentals and Architecture of Apache Kafka
Angelo Cesaro
 
What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2 What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2
confluent
 
Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)
Timothy Spann
 
Introduction to Kafka
Introduction to KafkaIntroduction to Kafka
Introduction to Kafka
Akash Vacher
 
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Erik Onnen
 
Building Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache KafkaBuilding Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache Kafka
Brian Ritchie
 
Real time Messages at Scale with Apache Kafka and Couchbase
Real time Messages at Scale with Apache Kafka and CouchbaseReal time Messages at Scale with Apache Kafka and Couchbase
Real time Messages at Scale with Apache Kafka and Couchbase
Will Gardella
 
Kafka blr-meetup-presentation - Kafka internals
Kafka blr-meetup-presentation - Kafka internalsKafka blr-meetup-presentation - Kafka internals
Kafka blr-meetup-presentation - Kafka internals
Ayyappadas Ravindran (Appu)
 
Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...
Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...
Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...
HostedbyConfluent
 
Everything you ever needed to know about Kafka on Kubernetes but were afraid ...
Everything you ever needed to know about Kafka on Kubernetes but were afraid ...Everything you ever needed to know about Kafka on Kubernetes but were afraid ...
Everything you ever needed to know about Kafka on Kubernetes but were afraid ...
HostedbyConfluent
 
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
confluent
 
A Modern C++ Kafka API | Kenneth Jia, Morgan Stanley
A Modern C++ Kafka API | Kenneth Jia, Morgan StanleyA Modern C++ Kafka API | Kenneth Jia, Morgan Stanley
A Modern C++ Kafka API | Kenneth Jia, Morgan Stanley
HostedbyConfluent
 
Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020
Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020
Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020
confluent
 
Reducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive StreamsReducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive Streams
jimriecken
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
Shiao-An Yuan
 
Kafka and Spark Streaming
Kafka and Spark StreamingKafka and Spark Streaming
Kafka and Spark Streaming
datamantra
 
kafka for db as postgres
kafka for db as postgreskafka for db as postgres
kafka for db as postgres
PivotalOpenSourceHub
 
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
HostedbyConfluent
 
Kafka Tutorial - basics of the Kafka streaming platform
Kafka Tutorial - basics of the Kafka streaming platformKafka Tutorial - basics of the Kafka streaming platform
Kafka Tutorial - basics of the Kafka streaming platform
Jean-Paul Azar
 
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and VormetricProtecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
confluent
 

What's hot (20)

Fundamentals and Architecture of Apache Kafka
Fundamentals and Architecture of Apache KafkaFundamentals and Architecture of Apache Kafka
Fundamentals and Architecture of Apache Kafka
 
What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2 What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2
 
Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)
 
Introduction to Kafka
Introduction to KafkaIntroduction to Kafka
Introduction to Kafka
 
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
Data Models and Consumer Idioms Using Apache Kafka for Continuous Data Stream...
 
Building Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache KafkaBuilding Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache Kafka
 
Real time Messages at Scale with Apache Kafka and Couchbase
Real time Messages at Scale with Apache Kafka and CouchbaseReal time Messages at Scale with Apache Kafka and Couchbase
Real time Messages at Scale with Apache Kafka and Couchbase
 
Kafka blr-meetup-presentation - Kafka internals
Kafka blr-meetup-presentation - Kafka internalsKafka blr-meetup-presentation - Kafka internals
Kafka blr-meetup-presentation - Kafka internals
 
Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...
Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...
Monitoring and Resiliency Testing our Apache Kafka Clusters at Goldman Sachs ...
 
Everything you ever needed to know about Kafka on Kubernetes but were afraid ...
Everything you ever needed to know about Kafka on Kubernetes but were afraid ...Everything you ever needed to know about Kafka on Kubernetes but were afraid ...
Everything you ever needed to know about Kafka on Kubernetes but were afraid ...
 
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
Kafka Cluster Federation at Uber (Yupeng Fui & Xiaoman Dong, Uber) Kafka Summ...
 
A Modern C++ Kafka API | Kenneth Jia, Morgan Stanley
A Modern C++ Kafka API | Kenneth Jia, Morgan StanleyA Modern C++ Kafka API | Kenneth Jia, Morgan Stanley
A Modern C++ Kafka API | Kenneth Jia, Morgan Stanley
 
Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020
Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020
Welcome to Kafka; We’re Glad You’re Here (Dave Klein, Centene) Kafka Summit 2020
 
Reducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive StreamsReducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive Streams
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
 
Kafka and Spark Streaming
Kafka and Spark StreamingKafka and Spark Streaming
Kafka and Spark Streaming
 
kafka for db as postgres
kafka for db as postgreskafka for db as postgres
kafka for db as postgres
 
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
Tales from the four-comma club: Managing Kafka as a service at Salesforce | L...
 
Kafka Tutorial - basics of the Kafka streaming platform
Kafka Tutorial - basics of the Kafka streaming platformKafka Tutorial - basics of the Kafka streaming platform
Kafka Tutorial - basics of the Kafka streaming platform
 
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and VormetricProtecting your data at rest with Apache Kafka by Confluent and Vormetric
Protecting your data at rest with Apache Kafka by Confluent and Vormetric
 

Similar to Kafka Summit SF 2017 - Kafka and the Polyglot Programmer

IBM Message Hub service in Bluemix - Apache Kafka in a public cloud
IBM Message Hub service in Bluemix - Apache Kafka in a public cloudIBM Message Hub service in Bluemix - Apache Kafka in a public cloud
IBM Message Hub service in Bluemix - Apache Kafka in a public cloud
Andrew Schofield
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
IncQuery Labs
 
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
InfluxData
 
Using the Java Client Library by Noah Crowley, DevRel | InfluxData
Using the Java Client Library by Noah Crowley, DevRel | InfluxDataUsing the Java Client Library by Noah Crowley, DevRel | InfluxData
Using the Java Client Library by Noah Crowley, DevRel | InfluxData
InfluxData
 
Kafka Explainaton
Kafka ExplainatonKafka Explainaton
Kafka Explainaton
NguyenChiHoangMinh
 
Delivering big content at NBC News with RavenDB
Delivering big content at NBC News with RavenDBDelivering big content at NBC News with RavenDB
Delivering big content at NBC News with RavenDB
John Bennett
 
Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)
Camuel Gilyadov
 
InfluxDB 2.0 Client Libraries by Noah Crowley
InfluxDB 2.0 Client Libraries by Noah CrowleyInfluxDB 2.0 Client Libraries by Noah Crowley
InfluxDB 2.0 Client Libraries by Noah Crowley
InfluxData
 
What's New in AWS Serverless and Containers
What's New in AWS Serverless and ContainersWhat's New in AWS Serverless and Containers
What's New in AWS Serverless and Containers
Amazon Web Services
 
An introduction to Apache Kafka and Kafka ecosystem at LinkedIn
An introduction to Apache Kafka and Kafka ecosystem at LinkedInAn introduction to Apache Kafka and Kafka ecosystem at LinkedIn
An introduction to Apache Kafka and Kafka ecosystem at LinkedIn
Dong Lin
 
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Christopher Curtin
 
What's new in ASP.NET vNext
What's new in ASP.NET vNextWhat's new in ASP.NET vNext
What's new in ASP.NET vNext
Gunnar Peipman
 
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdfITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
Ortus Solutions, Corp
 
DevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseDevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash course
Cisco DevNet
 
Building streaming data applications using Kafka*[Connect + Core + Streams] b...
Building streaming data applications using Kafka*[Connect + Core + Streams] b...Building streaming data applications using Kafka*[Connect + Core + Streams] b...
Building streaming data applications using Kafka*[Connect + Core + Streams] b...
Data Con LA
 
Peeling back the Lambda layers
Peeling back the Lambda layersPeeling back the Lambda layers
Peeling back the Lambda layers
Patrick McCaffrey
 
Apache Drill (ver. 0.1, check ver. 0.2)
Apache Drill (ver. 0.1, check ver. 0.2)Apache Drill (ver. 0.1, check ver. 0.2)
Apache Drill (ver. 0.1, check ver. 0.2)
Camuel Gilyadov
 
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Amazon Web Services
 
Rust with-kafka-07-02-2019
Rust with-kafka-07-02-2019Rust with-kafka-07-02-2019
Rust with-kafka-07-02-2019
Gerard Klijs
 

Similar to Kafka Summit SF 2017 - Kafka and the Polyglot Programmer (20)

IBM Message Hub service in Bluemix - Apache Kafka in a public cloud
IBM Message Hub service in Bluemix - Apache Kafka in a public cloudIBM Message Hub service in Bluemix - Apache Kafka in a public cloud
IBM Message Hub service in Bluemix - Apache Kafka in a public cloud
 
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...Lessons learned from building Eclipse-based add-ons for commercial modeling t...
Lessons learned from building Eclipse-based add-ons for commercial modeling t...
 
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
2.0 Client Libraries & Using the Java Client by Noah Crowley, Developer Advoc...
 
Using the Java Client Library by Noah Crowley, DevRel | InfluxData
Using the Java Client Library by Noah Crowley, DevRel | InfluxDataUsing the Java Client Library by Noah Crowley, DevRel | InfluxData
Using the Java Client Library by Noah Crowley, DevRel | InfluxData
 
Kafka Explainaton
Kafka ExplainatonKafka Explainaton
Kafka Explainaton
 
Delivering big content at NBC News with RavenDB
Delivering big content at NBC News with RavenDBDelivering big content at NBC News with RavenDB
Delivering big content at NBC News with RavenDB
 
Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)
 
InfluxDB 2.0 Client Libraries by Noah Crowley
InfluxDB 2.0 Client Libraries by Noah CrowleyInfluxDB 2.0 Client Libraries by Noah Crowley
InfluxDB 2.0 Client Libraries by Noah Crowley
 
What's New in AWS Serverless and Containers
What's New in AWS Serverless and ContainersWhat's New in AWS Serverless and Containers
What's New in AWS Serverless and Containers
 
An introduction to Apache Kafka and Kafka ecosystem at LinkedIn
An introduction to Apache Kafka and Kafka ecosystem at LinkedInAn introduction to Apache Kafka and Kafka ecosystem at LinkedIn
An introduction to Apache Kafka and Kafka ecosystem at LinkedIn
 
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
 
What's new in ASP.NET vNext
What's new in ASP.NET vNextWhat's new in ASP.NET vNext
What's new in ASP.NET vNext
 
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdfITB2024 - Keynote Day 1 - Ortus Solutions.pdf
ITB2024 - Keynote Day 1 - Ortus Solutions.pdf
 
DevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseDevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash course
 
Building streaming data applications using Kafka*[Connect + Core + Streams] b...
Building streaming data applications using Kafka*[Connect + Core + Streams] b...Building streaming data applications using Kafka*[Connect + Core + Streams] b...
Building streaming data applications using Kafka*[Connect + Core + Streams] b...
 
Peeling back the Lambda layers
Peeling back the Lambda layersPeeling back the Lambda layers
Peeling back the Lambda layers
 
Docker-Intro
Docker-IntroDocker-Intro
Docker-Intro
 
Apache Drill (ver. 0.1, check ver. 0.2)
Apache Drill (ver. 0.1, check ver. 0.2)Apache Drill (ver. 0.1, check ver. 0.2)
Apache Drill (ver. 0.1, check ver. 0.2)
 
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
Get the EDGE to scale: Using Cloudfront along with edge compute to scale your...
 
Rust with-kafka-07-02-2019
Rust with-kafka-07-02-2019Rust with-kafka-07-02-2019
Rust with-kafka-07-02-2019
 

More from confluent

Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
confluent
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
confluent
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
confluent
 
Santander Stream Processing with Apache Flink
Santander Stream Processing with Apache FlinkSantander Stream Processing with Apache Flink
Santander Stream Processing with Apache Flink
confluent
 
Unlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insightsUnlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insights
confluent
 
Workshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con FlinkWorkshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con Flink
confluent
 
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
confluent
 
AWS Immersion Day Mapfre - Confluent
AWS Immersion Day Mapfre   -   ConfluentAWS Immersion Day Mapfre   -   Confluent
AWS Immersion Day Mapfre - Confluent
confluent
 
Eventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalkEventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalk
confluent
 
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent CloudQ&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
confluent
 
Citi TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
confluent
 
Build real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with ConfluentBuild real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with Confluent
confluent
 
Q&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service MeshQ&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service Mesh
confluent
 
Citi Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka MicroservicesCiti Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka Microservices
confluent
 
Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3
confluent
 
Citi Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging ModernizationCiti Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging Modernization
confluent
 
Citi Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time dataCiti Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time data
confluent
 
Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2
confluent
 
Data In Motion Paris 2023
Data In Motion Paris 2023Data In Motion Paris 2023
Data In Motion Paris 2023
confluent
 
Confluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with SynthesisConfluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with Synthesis
confluent
 

More from confluent (20)

Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Santander Stream Processing with Apache Flink
Santander Stream Processing with Apache FlinkSantander Stream Processing with Apache Flink
Santander Stream Processing with Apache Flink
 
Unlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insightsUnlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insights
 
Workshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con FlinkWorkshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con Flink
 
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
 
AWS Immersion Day Mapfre - Confluent
AWS Immersion Day Mapfre   -   ConfluentAWS Immersion Day Mapfre   -   Confluent
AWS Immersion Day Mapfre - Confluent
 
Eventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalkEventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalk
 
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent CloudQ&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
 
Citi TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
 
Build real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with ConfluentBuild real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with Confluent
 
Q&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service MeshQ&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service Mesh
 
Citi Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka MicroservicesCiti Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka Microservices
 
Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3
 
Citi Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging ModernizationCiti Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging Modernization
 
Citi Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time dataCiti Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time data
 
Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2
 
Data In Motion Paris 2023
Data In Motion Paris 2023Data In Motion Paris 2023
Data In Motion Paris 2023
 
Confluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with SynthesisConfluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with Synthesis
 

Recently uploaded

space technology lecture notes on satellite
space technology lecture notes on satellitespace technology lecture notes on satellite
space technology lecture notes on satellite
ongomchris
 
DESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docxDESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docx
FluxPrime1
 
HYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generationHYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generation
Robbie Edward Sayers
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
AmarGB2
 
The role of big data in decision making.
The role of big data in decision making.The role of big data in decision making.
The role of big data in decision making.
ankuprajapati0525
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
thanhdowork
 
block diagram and signal flow graph representation
block diagram and signal flow graph representationblock diagram and signal flow graph representation
block diagram and signal flow graph representation
Divya Somashekar
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
Kamal Acharya
 
AP LAB PPT.pdf ap lab ppt no title specific
AP LAB PPT.pdf ap lab ppt no title specificAP LAB PPT.pdf ap lab ppt no title specific
AP LAB PPT.pdf ap lab ppt no title specific
BrazilAccount1
 
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
Amil Baba Dawood bangali
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
Massimo Talia
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
fxintegritypublishin
 
power quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptxpower quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptx
ViniHema
 
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang,  ICLR 2024, MLILAB, KAIST AI.pdfJ.Yang,  ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
MLILAB
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
Pratik Pawar
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
R&R Consult
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
obonagu
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
Hierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power SystemHierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power System
Kerry Sado
 

Recently uploaded (20)

space technology lecture notes on satellite
space technology lecture notes on satellitespace technology lecture notes on satellite
space technology lecture notes on satellite
 
DESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docxDESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docx
 
HYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generationHYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generation
 
Investor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptxInvestor-Presentation-Q1FY2024 investor presentation document.pptx
Investor-Presentation-Q1FY2024 investor presentation document.pptx
 
The role of big data in decision making.
The role of big data in decision making.The role of big data in decision making.
The role of big data in decision making.
 
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
RAT: Retrieval Augmented Thoughts Elicit Context-Aware Reasoning in Long-Hori...
 
block diagram and signal flow graph representation
block diagram and signal flow graph representationblock diagram and signal flow graph representation
block diagram and signal flow graph representation
 
Student information management system project report ii.pdf
Student information management system project report ii.pdfStudent information management system project report ii.pdf
Student information management system project report ii.pdf
 
AP LAB PPT.pdf ap lab ppt no title specific
AP LAB PPT.pdf ap lab ppt no title specificAP LAB PPT.pdf ap lab ppt no title specific
AP LAB PPT.pdf ap lab ppt no title specific
 
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
NO1 Uk best vashikaran specialist in delhi vashikaran baba near me online vas...
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
 
power quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptxpower quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptx
 
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang,  ICLR 2024, MLILAB, KAIST AI.pdfJ.Yang,  ICLR 2024, MLILAB, KAIST AI.pdf
J.Yang, ICLR 2024, MLILAB, KAIST AI.pdf
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
Hierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power SystemHierarchical Digital Twin of a Naval Power System
Hierarchical Digital Twin of a Naval Power System
 

Kafka Summit SF 2017 - Kafka and the Polyglot Programmer

  • 1. © 2017 IBM Corporation Edoardo Comar ecomar@uk.ibm.com Andrew Schofield andrew_schofield@uk.ibm.com IBM Message Hub Kafka and the Polyglot Programmer A brief overview of the Kafka clients ecosystem
  • 2. © 2017 IBM Corporation Session objectives • Show some comparable Kafka usage from different languages • Show a little of what goes underneath a Kafka client • To appreciate the heavy lifting a client has to do • We’ll proceed in reverse order though J
  • 3. © 2017 IBM Corporation How does an application talk to Kafka ? • Protocol-level client libraries (implementing the Kafka “wire” API) • The “official” Java client • librdkafka C/C++ library and wrappers for other languages • Other clients from a large open-source ecosystem • Alternative “message-level” APIs • Kafkacat, REST • Higher-level APIs • Kafka Connect, Kafka Streams
  • 4. © 2017 IBM Corporation What is the Kafka protocol (the ‘wire’ API) ? • A set of Request/Response message pairs • e.g.: ProduceRequest, ProduceResponse (ApiKey=0) • A set of error codes • e.g.: Unknown Topic Or Partition (code=3) • Messages exchanged using Kafka’s own binary protocol • Over TCP (or TLS) • It’s not HTTP, AMQP, MQTT … • All requests initiated by the clients. • Brokers send Responses
  • 5. © 2017 IBM Corporation Kafka’s TCP binary protocol • Open-source protocol (obviously!) • Messages defined in terms of Serializable data structures • Primitive types (intNN, nullable string) + Arrays • Struct types, e.g. RecordBatch for sequence of Records (key, value, metadata) • Clients typically holds multiple long-lived TCP connections • One per broker node • Clients expected to use non-blocking I/O http://kafka.apache.org/protocol
  • 6. © 2017 IBM Corporation Kafka message capture with Wireshark $ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
  • 7. © 2017 IBM Corporation Anatomy of a wire message Magic 1 (v.0.10.x)
  • 8. © 2017 IBM Corporation In 0.11 RecordBatch superseded MessageSet • Magic value = 2 • Records have Headers (KIP-82) • They look like footers 😀 • Metadata for Exactly-Once Semantics • Space savings for large batches https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+ Kafka+Protocol#AGuideToTheKafkaProtocol-Messagesets
  • 9. © 2017 IBM Corporation It’s an open Source protocol … … so anyone can write a client, in any language ? • In theory, yes • In practice, it’s a very big investment • A lot of intelligence goes in the client • Partitioning • Consumer Group assignment • Complexity has grown a lot since 0.8 … • Consumer group protocol • Security protocols/SASL mechanisms • KIP-4 (administrative actions) • Exactly-Once Semantics
  • 10. © 2017 IBM Corporation The evolution of the Kafka API Kafka Version released # of API Keys (RPCs) # of Error Codes Including -1 UNKNOWN 0 NO_ERROR 0.7.2 Nov 2012 5 6 0.8.0 Nov 2013 8 13 0.9.0 Nov 2015 17 33 0.10.0 May 2016 19 37 0.10.2 Feb 2017 21 46 0.11.0 June 2017 33 55 • Brokers support older clients • Recent clients support somewhat older brokers
  • 11. © 2017 IBM Corporation • Good support for the features of Apache Kafka • Message keys, committing offsets, exactly-once semantics, ... • Blending natural idioms of the language with proper use of Kafka • Solid software engineering • Responsive community support • Native code or ‘pure’ • Particularly important in the cloud • Does it support the technologies you have chosen to use? • Message encoding, Schema Registry, ... What makes for a good choice of client?
  • 12. © 2017 IBM Corporation Project Language Pure or native code Apache Kafka client Java pure librdkafka C / C++ – node-kafka-native JavaScript (Node.js) native node-rdkafka JavaScript (Node.js) native confluent-kafka-go Go native Sarama Go pure kafkacat CLI / Shell scripts – Confluent Kafka REST Any – Let’s take a look at some different clients
  • 13. © 2017 IBM Corporation Java producer • Part of Apache Kafka • Best for feature support and performance • Asynchronous with batching • Highly configurable • Rich metrics https://kafka.apache.org/0110/javadoc/index.html
  • 14. © 2017 IBM Corporation • Part of Apache Kafka • Best for feature support and performance • Single-threaded • Polls for records and this is also a liveness check • Commits offsets automatically, async or sync Java consumer https://kafka.apache.org/0110/javadoc/index.html
  • 15. © 2017 IBM Corporation C / C++ librdkafka • Fully featured native code Kafka client library • Portable so supports Linux, MacOS, Windows and more • Used as the basis for many other client libraries for other languages • Does a good job of keeping track with the Kafka releases • A bit tricky to build on platforms other than Linux if you want security • SASL only recently supported on Windows • SSL on Mac requires homebrew • Can emit metrics • At broker and topic-partition levels https://github.com/edenhill/librdkafka
  • 16. © 2017 IBM Corporation • Concepts very similar to Apache Kafka client • But you have to manage memory yourself • Uses callbacks to report status but you have to poll to have them fire C librdkafka producer
  • 17. © 2017 IBM Corporation • This is the low-level consumer interface • The high-level one supports consumer groups • Thread-safe (unlike Java) C librdkafka consumer
  • 18. © 2017 IBM Corporation • Built on top of the C library • Looks more similar to Java, primarily because it’s object- oriented • Again, there’s a need to make a regular call to respond to callbacks C++ librdkafka consumer
  • 19. © 2017 IBM Corporation • Another Node.js module wrapping librdkafka • Looked promising but ultimately not updated to keep up with new features • No updates for a long time now • Use node-rdkafka instead https://github.com/alfred-landrum/node-kafka-native JS node-kafka-native
  • 20. © 2017 IBM Corporation • Third-party Node.js module wrapping librdkafka • Natural Node.js style of event delivery • A good example of the community working well https://github.com/Blizzard/node-rdkafka JS node-rdkafka producer
  • 21. © 2017 IBM Corporation • Supports many of the features of consuming such as rebalancing, committing offsets • There’s also a streaming interface https://github.com/Blizzard/node-rdkafka JS node-rdkafka consumer
  • 22. © 2017 IBM Corporation confluent-kafka-go producer • Confluent Go client based on librdkafka • Two variants of producer • Function-based • Channel-based • Delivery reports emitted on Events channel
  • 23. © 2017 IBM Corporation • This variant of the API uses polling and then a type switch confluent-kafka-go consumer
  • 24. © 2017 IBM Corporation • This variant of the API uses a channel to deliver messages and events such as rebalance confluent-kafka-go consumer
  • 25. © 2017 IBM Corporation • Third-party pure Go client • Currently at 0.10.2.x level Go Sarama producer https://shopify.github.io/sarama/
  • 26. © 2017 IBM Corporation • Consumer groups not supported yet • No offset tracking • Available as 3rd party extensions Go Sarama consumer https://shopify.github.io/sarama/
  • 27. © 2017 IBM Corporation kafkacat https://github.com/edenhill/kafkacat • Command line non-JVM Kafka producer and consumer • Unsurprisingly, uses librdkafka too • Useful in shell scripts and just for trying stuff out on the command line
  • 28. © 2017 IBM Corporation • Part of Confluent Platform • Integrated with Schema Registry • Use any language… • A bit tricky to format the data correctly Confluent Kafka REST https://github.com/confluentinc/kafka-rest
  • 29. © 2017 IBM Corporation Do non-Java users face many issues? • Most problems are conceptual • Many new users struggle with the concepts of Kafka L • Users assume it’s the same as traditional messaging systems • Partitions, consumer groups, at-least-once semantics, ... • Documentation nowadays is getting really good • Historically, lack of best-practice examples in the various languages • Handling expected errors properly is a common theme • Failed commits, producer timeouts, ... • Non-Java clients lag behind Java in features • librdkafka doing a great job here, but dependent clients need to expose the features • Even more true for independent clients
  • 30. © 2017 IBM Corporation Summary • Kafka has mature clients for several popular languages • Java still gives the best experience • librdkafka is delivering a solid base for non-Java clients • At the expense of native code • Some third-party ‘pure’ clients look good too • But the community support needs to stay the course
  • 31. © 2017 IBM Corporation A few links Kafka Protocol http://kafka.apache.org/protocol https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol Kafka Clients directory https://cwiki.apache.org/confluence/display/KAFKA/Clients Code samples / modules https://github.com/ibm-messaging/message-hub-samples https://www.npmjs.com/package/message-hub-rest http://docs.confluent.io/current/clients/index.html
  • 32. © 2017 IBM Corporation Q & A Contact us through the Summit App or via email ecomar@uk.ibm.com andrew_schofield@uk.ibm.com Thanks !