Skip to main content

Streaming data vormt een steeds belangrijkere bron van informatie voor organisaties. Een voorbeeld zijn de likes op facebook en clicks op de website. Deze streaming data wordt gebruikt om transactionele data zoals orders, voorraad en shopping carts te verrijken. Al deze data is uitermate belangrijk om het klantgedrag en eventuele fricties goed te begrijpen en is voeding voor predictive analytics engines die het verschil kunnen maken. Hier komt Kafka om de hoek kijken.

Kafka is een uniform en schaalbaar open source platform voor het verwerken van real-time datafeeds. Naast het verwerken van likes en clicks zijn er talloze andere toepassingen.

Een verslag van de lezing: “Kafka Connect the Dots: Building Oracle Change Data Capture (CDC) Pipelines With Kafka” op door NL Oracle User Group georganiseerde Tech Experience 2018 – “The Cloud is Next” – in de Rijtuigenloods in Amersfoort.

T. Struik
Senior Oracle Consultant
E: tstruik@itium.nl

Kafka en use cases

Kafka stelt gebruikers in staat om zich op data feeds te abonneren en gegevens te publiceren op een willekeurig aantal systemen of real-time applicaties. Voorbeeldtoepassingen zijn onder meer het beheren van passagiers- en chauffeursmatching bij Uber, het bieden van realtime analyses en voorspellend onderhoud voor British Gas en het uitvoeren van talloze realtime-services op LinkedIn. Maar ook voor kleinere bedrijven zijn er legio interessante use cases.

◉ Berichtmakelaar:
Kafka kan ingezet worden als vervanging voor een traditionelere berichtmakelaar, om verwerking van gegevensproducenten te ontkoppelen, onbewerkte berichten te bufferen en te distribueren.

◉ Tracking van website-activiteiten:
Siteactiviteit (paginabezoek, zoekopdrachten of andere acties die gebruikers kunnen uitvoeren) verzamelen, bewerken en vervolgens beschikbaar stellen voor realtime verwerking, realtime monitoring en laden in datawarehousing-systemen voor offline verwerking en rapportage.

◉ Logaggregatie en monitoring:
Het verzamelen van log- en monitoringgegevens van uiteenlopende systemen om gecentraliseerde feeds van operationele gegevens te produceren.

◉ Streamverwerking:
Het verwerken van onbewerkte invoergegevens uit Kafka-onderwerpen en deze vervolgens aggregeren, verrijken of anderszins omzetten in nieuwe onderwerpen voor verdere consumptie. Een voorbeeld daarvan is het doorzoeken van artikelinhoud van RSS-feeds, deze publiceren naar een “artikelen” onderwerp, de inhoud normaliseren of ontdubbelen en vervolgens publiceren naar een nieuw onderwerp. Een laatste verwerkingsfase kan deze inhoud aanbevelen aan gebruikers.

Eigenschappen Kafka

De mogelijkheden die Kafka Connect biedt voor het (op een eenvoudige en betrouwbare) manier ontsluiten van streaminggegevens, konden in de drie kwartier van die lezing slechts kort worden aangestipt. Hieronder een wat uitgebreidere introductie van Apache Kafka en Confluent Connect.

Open source publish/subscribe platform

Apache Kafka is een open source streaming platform ontwikkeld door de Apache Software Foundation, geschreven in Scala en Java. Apache Kafka is oorspronkelijk ontwikkeld door LinkedIn en is sinds begin 2011 open source.

Het is in feite een publish/subscribe messaging systeem zoals vele andere – een “man in the middle” in positieve zin, die berichten van meerdere systemen verzamelt en vervolgens verspreidt naar meerdere ontvangers.

Schaalbaarheid en performance

Wat Kafka onderscheidt van soortgelijke producten als AWS Simple Queue Service (SQS), ActiveMQ, Weblogic JMS, Open Message Queue, etc., is de nadruk op de schaalbaarheid en performance van real-time streaming. Kafka is ontworpen om in een cluster van 1 of meer servers te draaien, in 1 of meer datacenters. Het verhogen van de capaciteit en uptime is dus relatief eenvoudig te realiseren.

Eenvoudig van opzet

Verder is ook de gegevensindeling bewust zo simpel mogelijk gehouden. Kafka slaat alle inkomende berichten (“records”) van “producers” als key-value pairs op binnen een onderwerp (“topic”). Deze berichten worden verdeeld over verschillende partities (“partitions”) van het betreffende onderwerp. Binnen een partition worden records geordend op basis van hun offset (de positie van een bericht binnen een partitie), en geïndexeerd en opgeslagen samen met een timestamp. Dit maakt het geheel schaalbaar, redundant en efficient doorzoekbaar.

Clients

Clients (“consumers”) kunnen zich vervolgens abonneren op 1 of meerdere topics. De clients kunnen de records van deze topics ofwel real-time consumeren, ofwel records vanaf een bepaald tijdstip opvragen. Kafka bewaart records gedurende een instelbare periode (dit kan ook een onbepaalde tijd zijn). Door deze opzet maakt het niet uit of een client tijdelijk offline is, een achterstand kan altijd worden ingehaald.

Connectors

Connectors kunnen zelf worden gebouwd in Java, maar er zijn ook diverse open source connectors beschikbaar om Kafka te koppelen aan uiteenlopende systemen. De belangrijkste producent van connectors (en aanverwante Kafka uitbreidingen) is Confluent.

Confluent als integratielaag

Confluent is in 2014 opgericht door ex-medewerkers van LinkedIn.

Het Confluent platform breidt de integratiemogelijkheden van Apache Kafka verder uit en voegt hulpmiddelen toe om Kafka-clusters te optimaliseren, te beheren en te beveiligen. Confluent Open Source is gratis te downloaden; een betaalde versie met uitgebreidere beheer-, monitoring- en managementtools is beschikbaar als Confluent Enterprise.

JDBC connector

Voor het koppelen van Kafka met databases is een JDBC connector beschikbaar.

Met de JDBC-bronconnector kunnen gegevens uit elke relationele database met een JDBC-interface worden geimporteerd in Kafka topics. Door JDBC te gebruiken kan deze connector een grote verscheidenheid aan databases ondersteunen. Gegevens worden geladen door periodiek een SQL-query uit te voeren.

REST-proxy connector

Confluent levert ook een REST-proxy connector. Deze maakt deel uit van Confluent Open Source en Confluent Enterprise-distributies. De proxy biedt een RESTful-interface voor een Kafka-cluster, waardoor het eenvoudig is om berichten te produceren en te consumeren, de status van het cluster te bekijken en administratieve acties uit te voeren zonder het native Kafka-protocol of de clients te gebruiken.

KSQL

Voor het real-time lezen, schrijven en verwerken van streaminggegevens is de opensource, streaming SQL-engine KSQL beschikbaar. KSQL maakt het eenvoudig om streaminggegevens in real-time te verwerken met behulp van een SQL-achtige semantiek. KSQL biedt krachtige verwerkingsmogelijkheden voor streams, zoals joins, aggregaties, event-time windowing, en maakt tegelijk volledig gebruik van het Confluent Platform.

Confluent levert verder standaard connectors voor o.a. HDFS, S3, Elasticsearch, Kafka Replicator, JMS, IBM MQ, ActiveMQ en Kafka FileStreams.

Conclusie

De combinatie van Apache Kafka en Confluent biedt een schaalbare, betrouwbare, en tegelijkertijd eenvoudig te implementeren, manier om data real-time te verzamelen en te distribueren.

Met name het gebruik van alleen key-value pairs als gegevensvorm is een sterk punt. Het houdt de basis zeer eenvoudig maar levert tegelijkertijd geen beperkingen op. Dit concept, gecombineerd met de diverse beschikbare connectors, maakt het geheel eenvoudig in te zetten, te beheren en uit te breiden.

Doordat gegevens real-time worden geleverd door de (schaalbare) Kafka database i.p.v. rechtstreeks door de bronsystemen, worden de bronsystemen ontlast. Het opvragen van grote hoeveelheden data zal dus niet leiden tot performance issues bij de bron, maar alleen Kafka meer belasten – en dat Kafka platform kan zeer eenvoudig worden uitgebreid om aan die grotere vraag te voldoen.

Meer info

◉  Apache Kafka
◉  Confluent
◉  Confluent JDBC
◉  Confluent KSQL
◉  Confluent REST-proxy

Neem Contact Met Ons Op

ir. Bauke den Otter
Senior BI & Data specialist
T: +31 (0)6-24700066
E: botter@itium.nl

Gerda Ackermann
Sourcing
T: +31 (0)6-11164731
E: gackermann@itium.nl

ir. N. Klaver
Senior Oracle Consultant
E: nklaver@itium.nl

V. Bax
Senior Oracle Consultant
E: vbax@itium.nl

A. Aten
Senior Oracle Consultant
E: aaten@itium.nl