SlideShare uma empresa Scribd logo
1 de 32
© 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 !

Mais conteúdo relacionado

Mais procurados

Fundamentals and Architecture of Apache Kafka
Fundamentals and Architecture of Apache KafkaFundamentals and Architecture of Apache Kafka
Fundamentals and Architecture of Apache KafkaAngelo 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 KafkaAkash 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 KafkaBrian 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 CouchbaseWill Gardella
 
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 StanleyHostedbyConfluent
 
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 2020confluent
 
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 Streamsjimriecken
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache KafkaShiao-An Yuan
 
Kafka and Spark Streaming
Kafka and Spark StreamingKafka and Spark Streaming
Kafka and Spark Streamingdatamantra
 
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 platformJean-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 Vormetricconfluent
 

Mais procurados (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
 

Semelhante a 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 cloudAndrew 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 | InfluxDataInfluxData
 
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 RavenDBJohn Bennett
 
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 CrowleyInfluxData
 
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 ContainersAmazon 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 LinkedInDong 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 2013Christopher 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 vNextGunnar Peipman
 
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 courseCisco 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 layersPatrick 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-2019Gerard Klijs
 
A look ahead at RAP (ESE 2010)
A look ahead at RAP (ESE 2010)A look ahead at RAP (ESE 2010)
A look ahead at RAP (ESE 2010)Ralf Sternberg
 

Semelhante a 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
 
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
 
A look ahead at RAP (ESE 2010)
A look ahead at RAP (ESE 2010)A look ahead at RAP (ESE 2010)
A look ahead at RAP (ESE 2010)
 

Mais de 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 Flinkconfluent
 
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 insightsconfluent
 
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 Flinkconfluent
 
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 - Confluentconfluent
 
Eventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalkEventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalkconfluent
 
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 Cloudconfluent
 
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 Diveconfluent
 
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 Confluentconfluent
 
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 Meshconfluent
 
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 Microservicesconfluent
 
Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3confluent
 
Citi Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging ModernizationCiti Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging Modernizationconfluent
 
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 dataconfluent
 
Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2confluent
 
Data In Motion Paris 2023
Data In Motion Paris 2023Data In Motion Paris 2023
Data In Motion Paris 2023confluent
 
Confluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with SynthesisConfluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with Synthesisconfluent
 
The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023confluent
 
The Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data StreamsThe Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data Streamsconfluent
 

Mais de confluent (20)

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
 
The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023
 
The Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data StreamsThe Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data Streams
 

Último

HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxHOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxSCMS School of Architecture
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VDineshKumar4165
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayEpec Engineered Technologies
 
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best ServiceTamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Servicemeghakumariji156
 
AIRCANVAS[1].pdf mini project for btech students
AIRCANVAS[1].pdf mini project for btech studentsAIRCANVAS[1].pdf mini project for btech students
AIRCANVAS[1].pdf mini project for btech studentsvanyagupta248
 
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxS1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxSCMS School of Architecture
 
DC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationDC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationBhangaleSonal
 
DeepFakes presentation : brief idea of DeepFakes
DeepFakes presentation : brief idea of DeepFakesDeepFakes presentation : brief idea of DeepFakes
DeepFakes presentation : brief idea of DeepFakesMayuraD1
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptDineshKumar4165
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaOmar Fathy
 
Online food ordering system project report.pdf
Online food ordering system project report.pdfOnline food ordering system project report.pdf
Online food ordering system project report.pdfKamal Acharya
 
Moment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilMoment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilVinayVitekari
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptxJIT KUMAR GUPTA
 
kiln thermal load.pptx kiln tgermal load
kiln thermal load.pptx kiln tgermal loadkiln thermal load.pptx kiln tgermal load
kiln thermal load.pptx kiln tgermal loadhamedmustafa094
 
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARHAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARKOUSTAV SARKAR
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXssuser89054b
 
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments""Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"mphochane1998
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptNANDHAKUMARA10
 
Computer Lecture 01.pptxIntroduction to Computers
Computer Lecture 01.pptxIntroduction to ComputersComputer Lecture 01.pptxIntroduction to Computers
Computer Lecture 01.pptxIntroduction to ComputersMairaAshraf6
 
Verification of thevenin's theorem for BEEE Lab (1).pptx
Verification of thevenin's theorem for BEEE Lab (1).pptxVerification of thevenin's theorem for BEEE Lab (1).pptx
Verification of thevenin's theorem for BEEE Lab (1).pptxchumtiyababu
 

Último (20)

HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptxHOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
HOA1&2 - Module 3 - PREHISTORCI ARCHITECTURE OF KERALA.pptx
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
 
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best ServiceTamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
Tamil Call Girls Bhayandar WhatsApp +91-9930687706, Best Service
 
AIRCANVAS[1].pdf mini project for btech students
AIRCANVAS[1].pdf mini project for btech studentsAIRCANVAS[1].pdf mini project for btech students
AIRCANVAS[1].pdf mini project for btech students
 
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptxS1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
S1S2 B.Arch MGU - HOA1&2 Module 3 -Temple Architecture of Kerala.pptx
 
DC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationDC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equation
 
DeepFakes presentation : brief idea of DeepFakes
DeepFakes presentation : brief idea of DeepFakesDeepFakes presentation : brief idea of DeepFakes
DeepFakes presentation : brief idea of DeepFakes
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS Lambda
 
Online food ordering system project report.pdf
Online food ordering system project report.pdfOnline food ordering system project report.pdf
Online food ordering system project report.pdf
 
Moment Distribution Method For Btech Civil
Moment Distribution Method For Btech CivilMoment Distribution Method For Btech Civil
Moment Distribution Method For Btech Civil
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
 
kiln thermal load.pptx kiln tgermal load
kiln thermal load.pptx kiln tgermal loadkiln thermal load.pptx kiln tgermal load
kiln thermal load.pptx kiln tgermal load
 
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKARHAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
HAND TOOLS USED AT ELECTRONICS WORK PRESENTED BY KOUSTAV SARKAR
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments""Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.ppt
 
Computer Lecture 01.pptxIntroduction to Computers
Computer Lecture 01.pptxIntroduction to ComputersComputer Lecture 01.pptxIntroduction to Computers
Computer Lecture 01.pptxIntroduction to Computers
 
Verification of thevenin's theorem for BEEE Lab (1).pptx
Verification of thevenin's theorem for BEEE Lab (1).pptxVerification of thevenin's theorem for BEEE Lab (1).pptx
Verification of thevenin's theorem for BEEE Lab (1).pptx
 

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 !