|
Batch-Verarbeitung |
Stream-Verarbeitung |
Datenumfang |
Abfragen oder Verarbeitung über alle oder die meisten Daten im Datensatz. |
Abfragen oder Verarbeitung über Daten in einem gleitenden Zeitfenster oder über die neuesten Datenaufzeichnungen. |
Datengröße |
Große Datenbündel. |
Individuelle Mikrobündel aus wenigen Aufzeichnungen. |
Performance |
Latenzen in Minuten zu Stunden. |
Erfordert Latenzen im Bereich von Sekunden oder Millisekunden. |
Analysen |
Komplexe Analysen. |
Einfache Reaktionsfunktionen, Aggregate und gleitende Metriken. |
[2]
---
class: center, middle
# Datenspeicherung
---
## Time Series Datenbanken
* Kontinuierlich generierte Daten eines Streams besitzen oft eine Zeitachse
* Time Series Datenbanken sind dafür ausgelegt Daten mit einem Timestamp zu speichern
* Vorteile Time Series Datenbanken
* Aufnehmen von Daten mit einer hohen Datenrate
* Aufnehmen von Daten aus vielen verschieden Quellen
* Einfache Abfragen die Verständnis der Zeitreihendaten erleichtern
* Optimiert für die Messung von Änderungen über die Zeit
* Schnelles Zusammenfassen von vielen Daten des gleichen Typs
* Schnelle Scannen der einzelnen Einträge
---
## Data Warehouse
* System zur Verwaltung der verteilten Speicherung von Daten
* SQL Datenbanken die Daten in einer bestimmten Struktur erwarten
* Erlauben das Speichern riesiger Datenmengen
* Niedrige Schreibgeschwindigkeit durch Datentransformationen
* Geringere Flexibilität durch vorgegebenes Schema
---
## Data Lakes
* Zentraler Speicher für alle Daten
* Für strukturierte oder und unstrukturierte Daten
* Daten werden in ihrem Rohformat gespeichert
* Daten innerhalb des Data Lakes können aus unterschiedlichen Quellen kommen und unterschiedliche Typen besitzen
* Erst beim Abrufen erfolgt ggf. Umstrukturierung
* Sehr schnell und flexibel
---
class: center, middle
# Kafka
---
# Kafka Gliederung
1. Was ist Kafka?
2. Hauptkonzepte
3. Kern APIs
4. Streaming Architektur
5. Use Cases
6. Kafka und Microservics
7. Abgrenzung zu anderer Big Data Science Software
8. Anwendungen On Top von Kafka
---
class: center, middle
# Was ist Kafka?
---
# Was ist Kafka?
*Kafka ist eine verteilte Streaming Plattform*
* Bietet drei Hauptfunktionen an
1. Einen *Publish und Subscribe* Mechanismus an einen Strom an Datensätzen (Stream of records), vergleichbar zu Messaging Systemen
2. Ein fehlertolerantes Speichern von Datenströmen (Streams)
3. Und das Verarbeiten von Streams sobald sie auftauchen
* Wird am häufigsten für zwei Anwendungsgebiete eingesetzt
1. Als Datapipline, die zuverlässig Daten zwischen Systemen in Echtzeit austauscht
2. Zum Transformieren und und reagieren auf Datenströme
---
class: center, middle
# Hauptkonzepte
---
# Hauptkonzepte
.center[![concepts](img/concepts.png)]
---
## Record
![concepts](img/record.png)
* Kleines Datenpaket
* Kleineste Einheit eines Streams
* Größe liegt im KB Bereich
* Besteht aus Schlüssel-Werte-Paar und einem Timestamp
---
## Topics and Logs
![concepts](img/topic.png)
* Kategorie unter der die Ströme von Datensätzen veröffentlicht werden
* Aufbau wie bei einer Log-Datei
* Eingehenden Datensätze gespeichert
* Neue Daten kontinuierlich an das Ende der Sequenz angehängt
* Sequenz ist dabei immutable
* Jeder Datensatz bekommt einen Offset zugewiesen
* Daten gespeichert, unabhängig davon ob sie gelesen wurden oder nicht
* Unterstützt Multi-Subscriber
---
## Partitions
![concepts](img/partitions.png)
* Ein Topic besteht aus mehreren Partitionen
* Jede Partition ist eine geordnete Sequenz von Datensätzen
* Sind über das Cluster verteilt
* Erlaubt eine nahezu unbegrenzte Menge an Datensätzen
* Unterstützt parallelisierte Verarbeitung
* Offset ist einzigartig für eine Partition, nicht für ein Topic!
---
## Replicas
![concepts](img/replicas.png)
* Jede Partition besitzt mehrere Kopien für eine höherere Fehlertoleranz
* Einen Server agiert als *Leader*
* Verantwortlich für alle Lese- und Schreibzugriffe
* Die anderen Server agieren als *Follower*
* Kopieren den Leader
* Für eine gleichmäßige Auslastung agiert ein Server als Leader für einzelne, wenige Partitionen und als Follower für die Anderen
---
## Producer
![concepts](img/producer.png)
* Publishen Records an Topics ihrer Wahl
* Verantwortlich dafür, welchen Datensatz er in welche Partition eines Topics schreibt
* Strategien sind z.B. Round-Robin oder semantische Aufteilung
---
## Consumer
![concepts](img/consumer.png)
* Liest die verschiedenen Datensätze einer Partition
* Lesen Üblicherweise -aber nicht zwingend- in einer sequenziellen Reihenfolge
* Für jeden Consumer wird ein Offset gespeichert
* Kontrolle über dem Offset liegt dabei bei dem jeweiligen Consumer
---
## Consumer Groups
![concepts](img/consumer_group.png)
* Jeder Consumer ist einer Gruppe von Consumern zugeordnet
* Ein Datensatz wird nur an eine Consumer innerhalb der Gruppe gesendet
* Spezialfälle
* Alle Consumer eines Topics haben die gleiche Gruppe: die Datensätze werden gleichmäßig aufgeteilt
* Alle Consumer eines Topics haben eine unterschiedliche Gruppe:ein Datensatz wird an jeden Consumer geschickt
* Bei Topics mit mehreren Partitionen: Partitionen werden auf die Consumer aufgeteilt
* Ein Consumer immer die Datensätze von der gleichen Subgruppe an Partitionen
---
## Consumer Groups
.center[![concepts](img/concepts.png)]
---
## Broker
![concepts](img/broker.png)
* Der Broker ist ein Kafka Server
* Verantwortlich für das verwalten und weiterleiten der eingehenden Datensätze
* Partitionen eines Topics werden gleichmäßig auf alle verfügbaren Broker aufgeteilt
---
## Zookeeper
* Verwaltet und koordiniert die verschiedenen Broker
* Soll Producer uns Consumer darüber zu informieren, dass ein neuer Broker verfügbar ist bzw. dass ein Broker ausgefallen ist
* Producer und Consumer nutzen diese Information, um ihrer Aufgaben über andere Broker zu koordinieren
---
## Cluster
.center[![concepts](img/concepts.png)]
---
class: center, middle
# Kern APIs
---
## Producer APIs
* Erlaubt es einer Applikation einen Datenstrom an ein oder mehr Topics zu veröffentlichen
````java
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("key.serializer",
"org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer",
"org.apache.kafka.common.serialization.StringSerializer");
Producer