Running Kafka on Kubernetes with Strimzi
Sean Glover, Lightbend @seg1o
Running Kafka on Kubernetes with Strimzi Sean Glover, Lightbend - - PowerPoint PPT Presentation
Running Kafka on Kubernetes with Strimzi Sean Glover, Lightbend @seg1o Who am I? Im Sean Glover Principal Engineer at Lightbend Member of the Lightbend Pipelines team Organizer of Scala Toronto (scalator) Author and
Sean Glover, Lightbend @seg1o
@seg1o
3
https://seanglover.com/ sean@seanglover.com
@seg1o
4
Designed by Freepik
@seg1o
7
@seg1o
8
@seg1o
9
@seg1o
10
@seg1o
12
@seg1o
13
Physical or Virtual Machine
Linux Kernel
Namespaces cgroups Modules
Cluster Resource Manager Container Engine
Container Container Container User space Kernel space Drivers
Linux Containers (LXC)
Jail Linux Container Windows Container
@seg1o
15
@seg1o
16
// Active Reconciliation Loop for { desired := getDesiredState() current := getCurrentState() makeChanges(desired, current) }
watches CRUD changes deploy reconciliation plan
“Kafka” Custom Resource
apiVersion: kafka.strimzi.io/v1alpha1 kind: Kafka metadata: name: simple-strimzi spec: kafka: config: ...
“Kafka” Custom Resource
apiVersion: kafka.strimzi.io/v1alpha1 kind: Kafka metadata: name: simple-strimzi spec: kafka: config: ...
@seg1o
17
StatefulSet
name: kafka-brokers
Pod
name: kafka-brokers-0
PersistentVolumeClaim
name: data-kafka-brokers-0
PersistentVolume
name: pvc-2a4f8bcb-45cd
@seg1o
18
PersistentVolumeClaim
name: data-kafka-brokers-0 size: 10GB storage class: aws-ebs
PersistentVolume
name: pvc-2a4f8bcb-45cd
AWS EBS Volume StorageClass
name: aws-ebs provisioner: kubernetes.io/aws-ebs Provisioner (aws-ebs)
@seg1o
20
@seg1o
21
“Kafka” CRD
watches deploys
Kafka StatefulSet ZooKeeper StatefulSet Broker Pod Broker Pod Broker Pod ZK Pod Cluster Operator Entity Operators
(User and Topic Operator)
Demo: ./resources/simple-strimzi.yaml
@seg1o
22
“KafkaTopic” CRD Kafka and ZooKeeper StatefulSets Entity Operators Topic Operator User Operator “KafkaUser” CRD
synchronizes with watches
Demo: ./resources/simple-topic.yaml
@seg1o
23
Broker Pod emptyDir Volume
Broker Pod PersistentVolume (PV)
Broker Pod PV 2 (b). Persistent JBOD PV PV
transient persistent persistent
Broker config
log.dirs = [PV1, PV2, PV3]
@seg1o
Helm Chart Install: helm repo add strimzi http://strimzi.io/charts/ helm install strimzi/strimzi-kafka-operator Demo: ./demo/01-create-simple-strimzi-cluster.sh 25
@seg1o
27
Kafka resource metadata.name Broker load balancer name Namespace K8s Service
“Plain” 9092 TLS 9093 Interbroker 9094 Prometheus 9404
Demo: ./demo/02-connecting-clients.sh run-kafka-perf-producer.sh
@seg1o
Demo: ./demo/03-broker-config-update.sh 28
@seg1o
Demo: ./demo/04-scale-brokers.sh ./partition-reassignment/generate-plan-output.json 29
kafka-0 kafka-0 kakfa-1 kafka-2
P0 P1 P2 P0 P1 P2
@seg1o
30
@seg1o
31
@seg1o
32
@seg1o
Use Kafka partition reassignment tool
(Ex. 75%, 80%)
33
Broker 0
P P P P
Broker 1
P P P P
Broker 2
P P P P
Broker 0
P P P P
Broker 1
P P
Broker 2
P P P P P P
kafka-reassign-partitions … --topics-to-move-json-file topics.json --broker-list "0,2" --generate kafka-reassign-partitions … --reassignment-json-file reassignment.json --execute --throttle 10000000 kafka-reassign-partitions … --topics-to-move-json-file topics.json --reassignment-json-file reassignment.json --verify
@seg1o
$ kubectl delete pod kafka-1
34
Broker 0
P P P P
Broker 1
P P
Broker 2
P P P P P P
Broker 1
@seg1o
Use Kafka partition reassignment tool
(Ex. 75%, 80%)
35
Broker 0
P P P P
Broker 1
P P P P
Broker 2
P P P P
Broker 0
P P P P
Broker 1
P P
Broker 2
P P P P P P
@seg1o
36
Kafka StatefulSet Cluster Operator “KafkaMirrorMaker” CRD
watches
MirrorMaker
deploys
Other Kafka
consumes produces
Demo: resources/kafka-mirror-maker.yaml
@seg1o
37
@seg1o
38
Broker Container Kafka Broker Process
Prometheus JMX Exporter Java Agent
0.0.0.0:9404/health
Prometheus Server
Demo: “Production” Strimzi resource: ./resources/pipelines-strimzi.yaml Grafana Dashboard
scrapes
@seg1o
40
@seg1o
41
@seg1o
42
@seg1o
44
@seg1o
45
https://www.lightbend.com/lightbend-platform