Skip to content

Commit 13e9818

Browse files
authored
Merge pull request #33 from Yolean/zookeeper-data
Persistent volumes for Zookeeper
2 parents edf7d84 + efb1019 commit 13e9818

File tree

6 files changed

+114
-16
lines changed

6 files changed

+114
-16
lines changed

README.md

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,13 @@ kubectl -n kafka get pvc
2424

2525
## Set up Zookeeper
2626

27-
The Kafka book (Definitive Guide, O'Reilly 2016) recommends that Kafka has its own Zookeeper cluster with at least 5 instances,
28-
so we use the [official docker image](https://hub.docker.com/_/zookeeper/)
29-
but with a [startup script change to guess node id from hostname](https://github.com/solsson/zookeeper-docker/commit/df9474f858ad548be8a365cb000a4dd2d2e3a217).
27+
The Kafka book (Definitive Guide, O'Reilly 2016) recommends that Kafka has its own Zookeeper cluster with at least 5 instances.
28+
We use the zookeeper build that comes with the Kafka distribution, and tweak the startup command to support StatefulSet.
3029

3130
```
3231
kubectl create -f ./zookeeper/
3332
```
3433

35-
Despite being a StatefulSet, there is no persistent volume by default.
36-
If you lose your zookeeper cluster, kafka will be unaware that persisted topics exist.
37-
The data is still there, but you need to re-create topics.
38-
3934
## Start Kafka
4035

4136
Assuming you have your PVCs `Bound`, or enabled automatic provisioning (see above), go ahead and:
@@ -85,4 +80,6 @@ Is the metrics system up and running?
8580
```
8681
kubectl logs -c metrics kafka-0
8782
kubectl exec -c broker kafka-0 -- /bin/sh -c 'apk add --no-cache curl && curl http://localhost:5556/metrics'
83+
kubectl logs -c metrics zoo-0
84+
kubectl exec -c zookeeper zoo-0 -- /bin/sh -c 'apk add --no-cache curl && curl http://localhost:5556/metrics'
8885
```

zookeeper/10zookeeper-config.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ data:
1111
clientPort=2181
1212
initLimit=5
1313
syncLimit=2
14-
server.1=zoo-0.zoo:2888:3888:participant
15-
server.2=zoo-1.zoo:2888:3888:participant
16-
server.3=zoo-2.zoo:2888:3888:participant
17-
server.4=zoo-3.zoo:2888:3888:participant
18-
server.5=zoo-4.zoo:2888:3888:participant
14+
server.1=pzoo-0.pzoo:2888:3888:participant
15+
server.2=pzoo-1.pzoo:2888:3888:participant
16+
server.3=pzoo-2.pzoo:2888:3888:participant
17+
server.4=zoo-0.zoo:2888:3888:participant
18+
server.5=zoo-1.zoo:2888:3888:participant
1919
2020
log4j.properties: |-
2121
log4j.rootLogger=INFO, stdout

zookeeper/20pzoo-service.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: pzoo
5+
namespace: kafka
6+
spec:
7+
ports:
8+
- port: 2888
9+
name: peer
10+
- port: 3888
11+
name: leader-election
12+
clusterIP: None
13+
selector:
14+
app: zookeeper
15+
storage: persistent

zookeeper/20zoo-service.yml renamed to zookeeper/21zoo-service.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ spec:
1212
clusterIP: None
1313
selector:
1414
app: zookeeper
15+
storage: ephemeral

zookeeper/50pzoo.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
apiVersion: apps/v1beta1
2+
kind: StatefulSet
3+
metadata:
4+
name: pzoo
5+
namespace: kafka
6+
spec:
7+
serviceName: "pzoo"
8+
replicas: 3
9+
template:
10+
metadata:
11+
labels:
12+
app: zookeeper
13+
storage: persistent
14+
annotations:
15+
prometheus.io/scrape: "true"
16+
prometheus.io/port: "5556"
17+
spec:
18+
terminationGracePeriodSeconds: 10
19+
containers:
20+
- name: metrics
21+
image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d
22+
command:
23+
- "java"
24+
- "-jar"
25+
- "jmx_prometheus_httpserver.jar"
26+
- "5556"
27+
- example_configs/zookeeper.yaml
28+
ports:
29+
- containerPort: 5556
30+
- name: zookeeper
31+
image: solsson/kafka:0.11.0.0-rc2@sha256:c1316e0131f4ec83bc645ca2141e4fda94e0d28f4fb5f836e15e37a5e054bdf1
32+
env:
33+
- name: JMX_PORT
34+
value: "5555"
35+
command:
36+
- sh
37+
- -c
38+
- >
39+
set -e;
40+
export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1));
41+
echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid;
42+
sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" config/zookeeper.properties;
43+
cat config/zookeeper.properties;
44+
./bin/zookeeper-server-start.sh config/zookeeper.properties
45+
ports:
46+
- containerPort: 2181
47+
name: client
48+
- containerPort: 2888
49+
name: peer
50+
- containerPort: 3888
51+
name: leader-election
52+
volumeMounts:
53+
- name: config
54+
mountPath: /usr/local/kafka/config
55+
- name: data
56+
mountPath: /var/lib/zookeeper/data
57+
volumes:
58+
- name: config
59+
configMap:
60+
name: zookeeper-config
61+
volumeClaimTemplates:
62+
- metadata:
63+
name: data
64+
spec:
65+
accessModes: [ "ReadWriteOnce" ]
66+
resources:
67+
requests:
68+
storage: 10Gi

zookeeper/50zoo.yml renamed to zookeeper/51zoo.yml

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,39 @@ metadata:
55
namespace: kafka
66
spec:
77
serviceName: "zoo"
8-
replicas: 5
8+
replicas: 2
99
template:
1010
metadata:
1111
labels:
1212
app: zookeeper
13+
storage: ephemeral
14+
annotations:
15+
prometheus.io/scrape: "true"
16+
prometheus.io/port: "5556"
1317
spec:
1418
terminationGracePeriodSeconds: 10
1519
containers:
20+
- name: metrics
21+
image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d
22+
command:
23+
- "java"
24+
- "-jar"
25+
- "jmx_prometheus_httpserver.jar"
26+
- "5556"
27+
- example_configs/zookeeper.yaml
28+
ports:
29+
- containerPort: 5556
1630
- name: zookeeper
1731
image: solsson/kafka:0.11.0.0-rc2@sha256:c1316e0131f4ec83bc645ca2141e4fda94e0d28f4fb5f836e15e37a5e054bdf1
32+
env:
33+
- name: JMX_PORT
34+
value: "5555"
1835
command:
1936
- sh
2037
- -c
2138
- >
2239
set -e;
23-
export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1));
40+
export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 4));
2441
echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid;
2542
sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" config/zookeeper.properties;
2643
cat config/zookeeper.properties;
@@ -35,11 +52,11 @@ spec:
3552
volumeMounts:
3653
- name: config
3754
mountPath: /usr/local/kafka/config
38-
- name: datadir
55+
- name: data
3956
mountPath: /var/lib/zookeeper/data
4057
volumes:
4158
- name: config
4259
configMap:
4360
name: zookeeper-config
44-
- name: datadir
61+
- name: data
4562
emptyDir: {}

0 commit comments

Comments
 (0)