From ac443a9c8dcea15b562dc49673f6722f093b41aa Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 23 Jul 2017 06:48:02 +0200 Subject: [PATCH 01/22] Fixes posix compatibility for probes --- zookeeper/50pzoo.yml | 4 ++-- zookeeper/51zoo.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index e3704536..f3f666ba 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -66,13 +66,13 @@ spec: command: - /bin/sh - -c - - '[ "imok" == $(echo "ruok" | nc -w 1 127.0.0.1 2181) ]' + - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' readinessProbe: exec: command: - /bin/sh - -c - - '[ "imok" == $(echo "ruok" | nc -w 1 127.0.0.1 2181) ]' + - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config mountPath: /usr/local/kafka/config diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 2bf1be9c..43199480 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -66,13 +66,13 @@ spec: command: - /bin/sh - -c - - '[ "imok" == $(echo "ruok" | nc -w 1 127.0.0.1 2181) ]' + - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' readinessProbe: exec: command: - /bin/sh - -c - - '[ "imok" == $(echo "ruok" | nc -w 1 127.0.0.1 2181) ]' + - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config mountPath: /usr/local/kafka/config From 9f47cd09eda070b7f6e1b7ef907431e239883146 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 23 Jul 2017 07:02:13 +0200 Subject: [PATCH 02/22] Upgrades to current https://github.com/solsson/dockerfiles/pull/5 --- 50kafka.yml | 2 +- test/11topic-create-test1.yml | 2 +- test/12topic-create-test2.yml | 2 +- test/21consumer-test1.yml | 2 +- test/31producer-test1.yml | 2 +- test/99testclient.yml | 2 +- update-kafka-image.sh | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index 8d4560c1..f53216dc 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -28,7 +28,7 @@ spec: cpu: 10m memory: 100Mi - name: broker - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 env: - name: JMX_PORT value: "5555" diff --git a/test/11topic-create-test1.yml b/test/11topic-create-test1.yml index d42f0eb3..536f3518 100644 --- a/test/11topic-create-test1.yml +++ b/test/11topic-create-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/12topic-create-test2.yml b/test/12topic-create-test2.yml index 687480c8..06fe4ab9 100644 --- a/test/12topic-create-test2.yml +++ b/test/12topic-create-test2.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/21consumer-test1.yml b/test/21consumer-test1.yml index e1db2cf3..baac880c 100644 --- a/test/21consumer-test1.yml +++ b/test/21consumer-test1.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 command: - ./bin/kafka-console-consumer.sh - --bootstrap-server diff --git a/test/31producer-test1.yml b/test/31producer-test1.yml index 9dfe3c8d..701090c4 100644 --- a/test/31producer-test1.yml +++ b/test/31producer-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 command: - /bin/sh - -c diff --git a/test/99testclient.yml b/test/99testclient.yml index ae71b0d8..8efa119c 100644 --- a/test/99testclient.yml +++ b/test/99testclient.yml @@ -8,7 +8,7 @@ metadata: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 command: - sh - -c diff --git a/update-kafka-image.sh b/update-kafka-image.sh index 602ccdd4..1c322930 100755 --- a/update-kafka-image.sh +++ b/update-kafka-image.sh @@ -4,5 +4,5 @@ IMAGE=$1 [ -z "$IMAGE" ] && echo "First argument should be the image to set" && exit 1 for F in ./ test/ zookeeper/; do - sed -i '' "s|image: solsson/kafka:.*|image: $IMAGE|" $F*.yml + sed -i "s|image: solsson/kafka:.*|image: $IMAGE|" $F*.yml done diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index f3f666ba..16c0aa54 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 env: - name: JMX_PORT value: "5555" diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 43199480..8e15a7fe 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:4c194db2ec15698aca6f1aa8a2fd5e5c566caed82b4bf43446c388f315397756 + image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 env: - name: JMX_PORT value: "5555" From 6a934de646c4d62675e604e899e583293372ba14 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 23 Jul 2017 08:50:01 +0200 Subject: [PATCH 03/22] solsson/kafka on debian restores installation path to /opt/kafka --- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index 16c0aa54..166c5033 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -75,7 +75,7 @@ spec: - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config - mountPath: /usr/local/kafka/config + mountPath: /opt/kafka/config - name: data mountPath: /var/lib/zookeeper/data volumes: diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 8e15a7fe..23c0c786 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -75,7 +75,7 @@ spec: - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config - mountPath: /usr/local/kafka/config + mountPath: /opt/kafka/config - name: data mountPath: /var/lib/zookeeper/data volumes: From c188f43cb8a252cd685a4944d35577ebc17a3668 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 23 Jul 2017 08:50:44 +0200 Subject: [PATCH 04/22] Default shell on debian should forward signals properly --- 50kafka.yml | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index f53216dc..a41ad390 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -35,7 +35,7 @@ spec: ports: - containerPort: 9092 command: - - /bin/bash + - /bin/sh - -c - > ./bin/kafka-server-start.sh diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index 166c5033..ddcef92f 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -42,7 +42,7 @@ spec: - name: JMX_PORT value: "5555" command: - - /bin/bash + - /bin/sh - -euc - > export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1)); diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 23c0c786..da571c4c 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -42,7 +42,7 @@ spec: - name: JMX_PORT value: "5555" command: - - /bin/bash + - /bin/sh - -euc - > export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 4)); From 1758478d9117730ab0fd3d6f2e28422594026585 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Sun, 23 Jul 2017 08:54:38 +0200 Subject: [PATCH 05/22] Adds yaml with the default .properties from 0.11.0.0 --- 10broker-config.yml | 239 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 10broker-config.yml diff --git a/10broker-config.yml b/10broker-config.yml new file mode 100644 index 00000000..b86a0577 --- /dev/null +++ b/10broker-config.yml @@ -0,0 +1,239 @@ +kind: ConfigMap +metadata: + name: broker-config + namespace: kafka +apiVersion: v1 +data: + server.properties: |- + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed with + # this work for additional information regarding copyright ownership. + # The ASF licenses this file to You under the Apache License, Version 2.0 + # (the "License"); you may not use this file except in compliance with + # the License. You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + + # see kafka.server.KafkaConfig for additional details and defaults + + ############################# Server Basics ############################# + + # The id of the broker. This must be set to a unique integer for each broker. + broker.id=0 + + # Switch to enable topic deletion or not, default value is false + #delete.topic.enable=true + + ############################# Socket Server Settings ############################# + + # The address the socket server listens on. It will get the value returned from + # java.net.InetAddress.getCanonicalHostName() if not configured. + # FORMAT: + # listeners = listener_name://host_name:port + # EXAMPLE: + # listeners = PLAINTEXT://your.host.name:9092 + #listeners=PLAINTEXT://:9092 + + # Hostname and port the broker will advertise to producers and consumers. If not set, + # it uses the value for "listeners" if configured. Otherwise, it will use the value + # returned from java.net.InetAddress.getCanonicalHostName(). + #advertised.listeners=PLAINTEXT://your.host.name:9092 + + # Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details + #listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL + + # The number of threads that the server uses for receiving requests from the network and sending responses to the network + num.network.threads=3 + + # The number of threads that the server uses for processing requests, which may include disk I/O + num.io.threads=8 + + # The send buffer (SO_SNDBUF) used by the socket server + socket.send.buffer.bytes=102400 + + # The receive buffer (SO_RCVBUF) used by the socket server + socket.receive.buffer.bytes=102400 + + # The maximum size of a request that the socket server will accept (protection against OOM) + socket.request.max.bytes=104857600 + + + ############################# Log Basics ############################# + + # A comma seperated list of directories under which to store log files + log.dirs=/tmp/kafka-logs + + # The default number of log partitions per topic. More partitions allow greater + # parallelism for consumption, but this will also result in more files across + # the brokers. + num.partitions=1 + + # The number of threads per data directory to be used for log recovery at startup and flushing at shutdown. + # This value is recommended to be increased for installations with data dirs located in RAID array. + num.recovery.threads.per.data.dir=1 + + ############################# Internal Topic Settings ############################# + # The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state" + # For anything other than development testing, a value greater than 1 is recommended for to ensure availability such as 3. + offsets.topic.replication.factor=1 + transaction.state.log.replication.factor=1 + transaction.state.log.min.isr=1 + + ############################# Log Flush Policy ############################# + + # Messages are immediately written to the filesystem but by default we only fsync() to sync + # the OS cache lazily. The following configurations control the flush of data to disk. + # There are a few important trade-offs here: + # 1. Durability: Unflushed data may be lost if you are not using replication. + # 2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush. + # 3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to exceessive seeks. + # The settings below allow one to configure the flush policy to flush data after a period of time or + # every N messages (or both). This can be done globally and overridden on a per-topic basis. + + # The number of messages to accept before forcing a flush of data to disk + #log.flush.interval.messages=10000 + + # The maximum amount of time a message can sit in a log before we force a flush + #log.flush.interval.ms=1000 + + ############################# Log Retention Policy ############################# + + # The following configurations control the disposal of log segments. The policy can + # be set to delete segments after a period of time, or after a given size has accumulated. + # A segment will be deleted whenever *either* of these criteria are met. Deletion always happens + # from the end of the log. + + # The minimum age of a log file to be eligible for deletion due to age + log.retention.hours=168 + + # A size-based retention policy for logs. Segments are pruned from the log as long as the remaining + # segments don't drop below log.retention.bytes. Functions independently of log.retention.hours. + #log.retention.bytes=1073741824 + + # The maximum size of a log segment file. When this size is reached a new log segment will be created. + log.segment.bytes=1073741824 + + # The interval at which log segments are checked to see if they can be deleted according + # to the retention policies + log.retention.check.interval.ms=300000 + + ############################# Zookeeper ############################# + + # Zookeeper connection string (see zookeeper docs for details). + # This is a comma separated host:port pairs, each corresponding to a zk + # server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002". + # You can also append an optional chroot string to the urls to specify the + # root directory for all kafka znodes. + zookeeper.connect=localhost:2181 + + # Timeout in ms for connecting to zookeeper + zookeeper.connection.timeout.ms=6000 + + + ############################# Group Coordinator Settings ############################# + + # The following configuration specifies the time, in milliseconds, that the GroupCoordinator will delay the initial consumer rebalance. + # The rebalance will be further delayed by the value of group.initial.rebalance.delay.ms as new members join the group, up to a maximum of max.poll.interval.ms. + # The default value for this is 3 seconds. + # We override this to 0 here as it makes for a better out-of-the-box experience for development and testing. + # However, in production environments the default value of 3 seconds is more suitable as this will help to avoid unnecessary, and potentially expensive, rebalances during application startup. + group.initial.rebalance.delay.ms=0 + + log4j.properties: |- + # Licensed to the Apache Software Foundation (ASF) under one or more + # contributor license agreements. See the NOTICE file distributed with + # this work for additional information regarding copyright ownership. + # The ASF licenses this file to You under the Apache License, Version 2.0 + # (the "License"); you may not use this file except in compliance with + # the License. You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + + # Unspecified loggers and loggers with additivity=true output to server.log and stdout + # Note that INFO only applies to unspecified loggers, the log level of the child logger is used otherwise + log4j.rootLogger=INFO, stdout, kafkaAppender + + log4j.appender.stdout=org.apache.log4j.ConsoleAppender + log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n + + log4j.appender.kafkaAppender=org.apache.log4j.DailyRollingFileAppender + log4j.appender.kafkaAppender.DatePattern='.'yyyy-MM-dd-HH + log4j.appender.kafkaAppender.File=${kafka.logs.dir}/server.log + log4j.appender.kafkaAppender.layout=org.apache.log4j.PatternLayout + log4j.appender.kafkaAppender.layout.ConversionPattern=[%d] %p %m (%c)%n + + log4j.appender.stateChangeAppender=org.apache.log4j.DailyRollingFileAppender + log4j.appender.stateChangeAppender.DatePattern='.'yyyy-MM-dd-HH + log4j.appender.stateChangeAppender.File=${kafka.logs.dir}/state-change.log + log4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayout + log4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%n + + log4j.appender.requestAppender=org.apache.log4j.DailyRollingFileAppender + log4j.appender.requestAppender.DatePattern='.'yyyy-MM-dd-HH + log4j.appender.requestAppender.File=${kafka.logs.dir}/kafka-request.log + log4j.appender.requestAppender.layout=org.apache.log4j.PatternLayout + log4j.appender.requestAppender.layout.ConversionPattern=[%d] %p %m (%c)%n + + log4j.appender.cleanerAppender=org.apache.log4j.DailyRollingFileAppender + log4j.appender.cleanerAppender.DatePattern='.'yyyy-MM-dd-HH + log4j.appender.cleanerAppender.File=${kafka.logs.dir}/log-cleaner.log + log4j.appender.cleanerAppender.layout=org.apache.log4j.PatternLayout + log4j.appender.cleanerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n + + log4j.appender.controllerAppender=org.apache.log4j.DailyRollingFileAppender + log4j.appender.controllerAppender.DatePattern='.'yyyy-MM-dd-HH + log4j.appender.controllerAppender.File=${kafka.logs.dir}/controller.log + log4j.appender.controllerAppender.layout=org.apache.log4j.PatternLayout + log4j.appender.controllerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n + + log4j.appender.authorizerAppender=org.apache.log4j.DailyRollingFileAppender + log4j.appender.authorizerAppender.DatePattern='.'yyyy-MM-dd-HH + log4j.appender.authorizerAppender.File=${kafka.logs.dir}/kafka-authorizer.log + log4j.appender.authorizerAppender.layout=org.apache.log4j.PatternLayout + log4j.appender.authorizerAppender.layout.ConversionPattern=[%d] %p %m (%c)%n + + # Change the two lines below to adjust ZK client logging + log4j.logger.org.I0Itec.zkclient.ZkClient=INFO + log4j.logger.org.apache.zookeeper=INFO + + # Change the two lines below to adjust the general broker logging level (output to server.log and stdout) + log4j.logger.kafka=INFO + log4j.logger.org.apache.kafka=INFO + + # Change to DEBUG or TRACE to enable request logging + log4j.logger.kafka.request.logger=WARN, requestAppender + log4j.additivity.kafka.request.logger=false + + # Uncomment the lines below and change log4j.logger.kafka.network.RequestChannel$ to TRACE for additional output + # related to the handling of requests + #log4j.logger.kafka.network.Processor=TRACE, requestAppender + #log4j.logger.kafka.server.KafkaApis=TRACE, requestAppender + #log4j.additivity.kafka.server.KafkaApis=false + log4j.logger.kafka.network.RequestChannel$=WARN, requestAppender + log4j.additivity.kafka.network.RequestChannel$=false + + log4j.logger.kafka.controller=TRACE, controllerAppender + log4j.additivity.kafka.controller=false + + log4j.logger.kafka.log.LogCleaner=INFO, cleanerAppender + log4j.additivity.kafka.log.LogCleaner=false + + log4j.logger.state.change.logger=TRACE, stateChangeAppender + log4j.additivity.state.change.logger=false + + # Change to DEBUG to enable audit log for the authorizer + log4j.logger.kafka.authorizer.logger=WARN, authorizerAppender + log4j.additivity.kafka.authorizer.logger=false From a30b5e75503975bb7f769beaae0a4a5c8f167c58 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Jul 2017 06:33:11 +0200 Subject: [PATCH 06/22] Use config map's config instead of image's --- 50kafka.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/50kafka.yml b/50kafka.yml index a41ad390..c5736b85 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -54,8 +54,14 @@ spec: - -c - 'echo "" | nc -w 1 127.0.0.1 9092' volumeMounts: + - name: config + mountPath: /opt/kafka/config - name: data mountPath: /var/lib/kafka/data + volumes: + - name: config + configMap: + name: broker-config volumeClaimTemplates: - metadata: name: data From b3491ce33dafdd9789287c5c0b267cbf9d30d21d Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Jul 2017 06:35:22 +0200 Subject: [PATCH 07/22] Validates against a gotcha --- update-kafka-image.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/update-kafka-image.sh b/update-kafka-image.sh index 1c322930..fae9c6ff 100755 --- a/update-kafka-image.sh +++ b/update-kafka-image.sh @@ -3,6 +3,8 @@ IMAGE=$1 [ -z "$IMAGE" ] && echo "First argument should be the image to set" && exit 1 +[[ $IMAGE != solsson/kafka:* ]] && echo "Should be the full image identifier" && exit 1 + for F in ./ test/ zookeeper/; do sed -i "s|image: solsson/kafka:.*|image: $IMAGE|" $F*.yml done From d8b2b41d48e51e8309c4e13e78b45401df30e6cc Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Jul 2017 06:41:53 +0200 Subject: [PATCH 08/22] With stock config we have to change zookeeper lookup from the default localhost --- 50kafka.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/50kafka.yml b/50kafka.yml index c5736b85..7d65d495 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -40,6 +40,7 @@ spec: - > ./bin/kafka-server-start.sh config/server.properties + --override zookeeper.connect=zookeeper:2181 --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics --override broker.id=${HOSTNAME##*-} From c86ed9c92ae889a10f4c04d526c7b757effb13ca Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Jul 2017 07:02:11 +0200 Subject: [PATCH 09/22] As recommended by https://www.confluent.io/blog/apache-kafka-for-service-architectures/ --- test/12topic-create-test2.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/12topic-create-test2.yml b/test/12topic-create-test2.yml index 06fe4ab9..baf2cc0a 100644 --- a/test/12topic-create-test2.yml +++ b/test/12topic-create-test2.yml @@ -22,4 +22,6 @@ spec: - "1" - --replication-factor - "3" + - --config + - min.insync.replicas=2 restartPolicy: Never From 0681cc515fa1c505b905ef60c7d3132e8d7510af Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Jul 2017 20:07:34 +0200 Subject: [PATCH 10/22] I think time saved by auto-creating topics will be lost ... tenfold in confusion caused by typos etc --- 50kafka.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/50kafka.yml b/50kafka.yml index 7d65d495..45eb86fd 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -44,6 +44,7 @@ spec: --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics --override broker.id=${HOSTNAME##*-} + --override auto.create.topics.enable=false resources: requests: cpu: 100m From 480b5fa7e33fb99159c36821b9d089c4b77f4dc8 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Tue, 25 Jul 2017 20:10:55 +0200 Subject: [PATCH 11/22] New build with https://github.com/solsson/dockerfiles/pull/9 --- 50kafka.yml | 2 +- test/11topic-create-test1.yml | 2 +- test/12topic-create-test2.yml | 2 +- test/21consumer-test1.yml | 2 +- test/31producer-test1.yml | 2 +- test/99testclient.yml | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index 45eb86fd..c00d920b 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -28,7 +28,7 @@ spec: cpu: 10m memory: 100Mi - name: broker - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b env: - name: JMX_PORT value: "5555" diff --git a/test/11topic-create-test1.yml b/test/11topic-create-test1.yml index 536f3518..8f734f95 100644 --- a/test/11topic-create-test1.yml +++ b/test/11topic-create-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/12topic-create-test2.yml b/test/12topic-create-test2.yml index baf2cc0a..d1d80483 100644 --- a/test/12topic-create-test2.yml +++ b/test/12topic-create-test2.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/21consumer-test1.yml b/test/21consumer-test1.yml index baac880c..a6222ac8 100644 --- a/test/21consumer-test1.yml +++ b/test/21consumer-test1.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b command: - ./bin/kafka-console-consumer.sh - --bootstrap-server diff --git a/test/31producer-test1.yml b/test/31producer-test1.yml index 701090c4..3e06c098 100644 --- a/test/31producer-test1.yml +++ b/test/31producer-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b command: - /bin/sh - -c diff --git a/test/99testclient.yml b/test/99testclient.yml index 8efa119c..f4e325ca 100644 --- a/test/99testclient.yml +++ b/test/99testclient.yml @@ -8,7 +8,7 @@ metadata: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b command: - sh - -c diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index ddcef92f..f4fce220 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b env: - name: JMX_PORT value: "5555" diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index da571c4c..ead8cb47 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:92c5092d7c2f10abd11693731f6e112d40bfd42d6428a7cdf0516c9666dd3e58 + image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b env: - name: JMX_PORT value: "5555" From 8340b11e1f1f825313969ed2505a9c93f9ba6549 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 05:43:41 +0200 Subject: [PATCH 12/22] New build at commit 0314080 --- 50kafka.yml | 2 +- test/11topic-create-test1.yml | 2 +- test/12topic-create-test2.yml | 2 +- test/21consumer-test1.yml | 2 +- test/31producer-test1.yml | 2 +- test/99testclient.yml | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index c00d920b..deee06f8 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -28,7 +28,7 @@ spec: cpu: 10m memory: 100Mi - name: broker - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc env: - name: JMX_PORT value: "5555" diff --git a/test/11topic-create-test1.yml b/test/11topic-create-test1.yml index 8f734f95..e7e54c34 100644 --- a/test/11topic-create-test1.yml +++ b/test/11topic-create-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/12topic-create-test2.yml b/test/12topic-create-test2.yml index d1d80483..fe97b40e 100644 --- a/test/12topic-create-test2.yml +++ b/test/12topic-create-test2.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/21consumer-test1.yml b/test/21consumer-test1.yml index a6222ac8..f861070a 100644 --- a/test/21consumer-test1.yml +++ b/test/21consumer-test1.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc command: - ./bin/kafka-console-consumer.sh - --bootstrap-server diff --git a/test/31producer-test1.yml b/test/31producer-test1.yml index 3e06c098..b41a1d2e 100644 --- a/test/31producer-test1.yml +++ b/test/31producer-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc command: - /bin/sh - -c diff --git a/test/99testclient.yml b/test/99testclient.yml index f4e325ca..6525416e 100644 --- a/test/99testclient.yml +++ b/test/99testclient.yml @@ -8,7 +8,7 @@ metadata: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc command: - sh - -c diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index f4fce220..4cfd3d4b 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc env: - name: JMX_PORT value: "5555" diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index ead8cb47..cbc0af1f 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:df808192488b280e3bee7a271208032a5669e0e58d4aebe83500492ebaea342b + image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc env: - name: JMX_PORT value: "5555" From 114b773cd7db1475768ae04547e03fd47361e74d Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 05:49:46 +0200 Subject: [PATCH 13/22] Clarifies a gotcha: to mount config with log4j.properties ... you must use /opt/kafka/config, due to how log4j.properites (sometimes tools- or connect-) are resolved by the ./bin scripts. See https://github.com/solsson/dockerfiles/pull/10 --- 50kafka.yml | 4 +++- zookeeper/50pzoo.yml | 2 ++ zookeeper/51zoo.yml | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/50kafka.yml b/50kafka.yml index deee06f8..dcc4e949 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -30,6 +30,8 @@ spec: - name: broker image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc env: + - name: KAFKA_LOG4J_OPTS + value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties - name: JMX_PORT value: "5555" ports: @@ -39,7 +41,7 @@ spec: - -c - > ./bin/kafka-server-start.sh - config/server.properties + ./config/server.properties --override zookeeper.connect=zookeeper:2181 --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index 4cfd3d4b..ff289d8b 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -39,6 +39,8 @@ spec: - name: zookeeper image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc env: + - name: KAFKA_LOG4J_OPTS + value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties - name: JMX_PORT value: "5555" command: diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index cbc0af1f..067096de 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -39,6 +39,8 @@ spec: - name: zookeeper image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc env: + - name: KAFKA_LOG4J_OPTS + value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties - name: JMX_PORT value: "5555" command: From 6f8f6d460b8683c07e5201a82415abbe0e106463 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:02:51 +0200 Subject: [PATCH 14/22] Tagged with the policy from https://github.com/solsson/dockerfiles/pull/11 --- 50kafka.yml | 2 +- test/11topic-create-test1.yml | 2 +- test/12topic-create-test2.yml | 2 +- test/21consumer-test1.yml | 2 +- test/31producer-test1.yml | 2 +- test/99testclient.yml | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index dcc4e949..8536b1c4 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -28,7 +28,7 @@ spec: cpu: 10m memory: 100Mi - name: broker - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties diff --git a/test/11topic-create-test1.yml b/test/11topic-create-test1.yml index e7e54c34..321dc575 100644 --- a/test/11topic-create-test1.yml +++ b/test/11topic-create-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/12topic-create-test2.yml b/test/12topic-create-test2.yml index fe97b40e..edbe1dfb 100644 --- a/test/12topic-create-test2.yml +++ b/test/12topic-create-test2.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: - ./bin/kafka-topics.sh - --zookeeper diff --git a/test/21consumer-test1.yml b/test/21consumer-test1.yml index f861070a..43678f8a 100644 --- a/test/21consumer-test1.yml +++ b/test/21consumer-test1.yml @@ -14,7 +14,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: - ./bin/kafka-console-consumer.sh - --bootstrap-server diff --git a/test/31producer-test1.yml b/test/31producer-test1.yml index b41a1d2e..354a16a7 100644 --- a/test/31producer-test1.yml +++ b/test/31producer-test1.yml @@ -10,7 +10,7 @@ spec: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: - /bin/sh - -c diff --git a/test/99testclient.yml b/test/99testclient.yml index 6525416e..a3670044 100644 --- a/test/99testclient.yml +++ b/test/99testclient.yml @@ -8,7 +8,7 @@ metadata: spec: containers: - name: kafka - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: - sh - -c diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index ff289d8b..ef12291b 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 067096de..0f5972cf 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -37,7 +37,7 @@ spec: cpu: 10m memory: 100Mi - name: zookeeper - image: solsson/kafka:0.11.0.0@sha256:e0dec6aa1f376bd374a6ca5863b783d01703acf1f71c0c4441a217a7bd80dfbc + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties From 5bb49e3d40150ff79f57a043a353eb66182c8beb Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:24:55 +0200 Subject: [PATCH 15/22] With explicit log4j path we can change config mount ... to not mix with sample config. See https://github.com/solsson/dockerfiles/pull/10. --- 50kafka.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index 8536b1c4..3ec2bb53 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -31,7 +31,7 @@ spec: image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS - value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties + value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties - name: JMX_PORT value: "5555" ports: @@ -41,7 +41,7 @@ spec: - -c - > ./bin/kafka-server-start.sh - ./config/server.properties + /etc/kafka/server.properties --override zookeeper.connect=zookeeper:2181 --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics @@ -59,7 +59,7 @@ spec: - 'echo "" | nc -w 1 127.0.0.1 9092' volumeMounts: - name: config - mountPath: /opt/kafka/config + mountPath: /etc/kafka - name: data mountPath: /var/lib/kafka/data volumes: From a2d324d509d7041642123f22b589ad4925ea1199 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:39:53 +0200 Subject: [PATCH 16/22] Default shell on Debian shows the same symptom ... of not forwarding signals as Alpine did. Kafka logs say nothing, and after 30s the container is terminated. With /bin/bash instead the log indicates shutdown behavior. This reverts commit c188f43cb8a252cd685a4944d35577ebc17a3668. --- 50kafka.yml | 2 +- zookeeper/50pzoo.yml | 2 +- zookeeper/51zoo.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index 3ec2bb53..051349e9 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -37,7 +37,7 @@ spec: ports: - containerPort: 9092 command: - - /bin/sh + - /bin/bash - -c - > ./bin/kafka-server-start.sh diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index ef12291b..ef77c5cb 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -44,7 +44,7 @@ spec: - name: JMX_PORT value: "5555" command: - - /bin/sh + - /bin/bash - -euc - > export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1)); diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 0f5972cf..6eb81d42 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -44,7 +44,7 @@ spec: - name: JMX_PORT value: "5555" command: - - /bin/sh + - /bin/bash - -euc - > export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 4)); From be5a82037682d9b1ebd907a367e839ecd71aa1fa Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 11:38:47 +0200 Subject: [PATCH 17/22] Demonstrates how an init script can be used to ... modify config prior to kafka start. My aim with this is to get rid of the /bin/sh startup scripts and use bin + args directly. --- 10broker-config.yml | 4 ++++ 50kafka.yml | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/10broker-config.yml b/10broker-config.yml index b86a0577..b6ecf1cc 100644 --- a/10broker-config.yml +++ b/10broker-config.yml @@ -4,6 +4,10 @@ metadata: namespace: kafka apiVersion: v1 data: + init.sh: |- + echo "I guess I'm running in the init container" + sed -i 's/%p %m/%p -INIT-WAS-HERE- %m/' /etc/kafka/log4j.properties + server.properties: |- # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with diff --git a/50kafka.yml b/50kafka.yml index 051349e9..930dcdad 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -15,6 +15,13 @@ spec: prometheus.io/port: "5556" spec: terminationGracePeriodSeconds: 30 + initContainers: + - name: init-config + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce + command: ['/bin/sh', '-ec', '. /etc/kafka/init.sh'] + volumeMounts: + - name: config + mountPath: /etc/kafka containers: - name: metrics image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d From 0d534e8ad6f0766cb29293b148ffc9ee6bdec35f Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 16:48:14 +0200 Subject: [PATCH 18/22] Moves broker.id config into init script --- 10broker-config.yml | 9 ++++++--- 50kafka.yml | 3 +-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/10broker-config.yml b/10broker-config.yml index b6ecf1cc..af0f0374 100644 --- a/10broker-config.yml +++ b/10broker-config.yml @@ -5,8 +5,11 @@ metadata: apiVersion: v1 data: init.sh: |- - echo "I guess I'm running in the init container" - sed -i 's/%p %m/%p -INIT-WAS-HERE- %m/' /etc/kafka/log4j.properties + #!/bin/bash + set -x + + export KAFKA_BROKER_ID=${HOSTNAME##*-} + sed -i "s/\${KAFKA_BROKER_ID}/$KAFKA_BROKER_ID/" /etc/kafka/server.properties server.properties: |- # Licensed to the Apache Software Foundation (ASF) under one or more @@ -29,7 +32,7 @@ data: ############################# Server Basics ############################# # The id of the broker. This must be set to a unique integer for each broker. - broker.id=0 + broker.id=${KAFKA_BROKER_ID} # Switch to enable topic deletion or not, default value is false #delete.topic.enable=true diff --git a/50kafka.yml b/50kafka.yml index 930dcdad..c55edc5b 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -18,7 +18,7 @@ spec: initContainers: - name: init-config image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce - command: ['/bin/sh', '-ec', '. /etc/kafka/init.sh'] + command: ['/bin/bash', '/etc/kafka/init.sh'] volumeMounts: - name: config mountPath: /etc/kafka @@ -52,7 +52,6 @@ spec: --override zookeeper.connect=zookeeper:2181 --override log.retention.hours=-1 --override log.dirs=/var/lib/kafka/data/topics - --override broker.id=${HOSTNAME##*-} --override auto.create.topics.enable=false resources: requests: From bfe7e31511e96d53b558708ffa7bcb1cc2336c42 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 16:51:16 +0200 Subject: [PATCH 19/22] With no bash tricks in command we can use the actual bin ... avoiding a layer of indirection and the associated gotchas with signals. --- 50kafka.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/50kafka.yml b/50kafka.yml index c55edc5b..9b8bde28 100644 --- a/50kafka.yml +++ b/50kafka.yml @@ -44,15 +44,16 @@ spec: ports: - containerPort: 9092 command: - - /bin/bash - - -c - - > - ./bin/kafka-server-start.sh - /etc/kafka/server.properties - --override zookeeper.connect=zookeeper:2181 - --override log.retention.hours=-1 - --override log.dirs=/var/lib/kafka/data/topics - --override auto.create.topics.enable=false + - ./bin/kafka-server-start.sh + - /etc/kafka/server.properties + - --override + - zookeeper.connect=zookeeper:2181 + - --override + - log.retention.hours=-1 + - --override + - log.dirs=/var/lib/kafka/data/topics + - --override + - auto.create.topics.enable=false resources: requests: cpu: 100m From fda7bdb6b91c5abfb044efc6630447c86d8544ba Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Wed, 26 Jul 2017 21:45:48 +0200 Subject: [PATCH 20/22] Employs the init script concept for zookeeper too, reducing duplcation --- zookeeper/10zookeeper-config.yml | 14 +++++++++++++- zookeeper/50pzoo.yml | 23 +++++++++++++---------- zookeeper/51zoo.yml | 23 +++++++++++++---------- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 58d8b6aa..58e5c56e 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -4,6 +4,18 @@ metadata: namespace: kafka apiVersion: v1 data: + init.sh: |- + #!/bin/bash + set -x + + OFFSET=1 + case $HOSTNAME in zoo-*) + OFFSET=4 + esac + export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $OFFSET)) + echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid + sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties + zookeeper.properties: |- tickTime=2000 dataDir=/var/lib/zookeeper/data @@ -16,7 +28,7 @@ data: server.3=pzoo-2.pzoo:2888:3888:participant server.4=zoo-0.zoo:2888:3888:participant server.5=zoo-1.zoo:2888:3888:participant - + log4j.properties: |- log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender diff --git a/zookeeper/50pzoo.yml b/zookeeper/50pzoo.yml index ef77c5cb..9989662f 100644 --- a/zookeeper/50pzoo.yml +++ b/zookeeper/50pzoo.yml @@ -16,6 +16,15 @@ spec: prometheus.io/port: "5556" spec: terminationGracePeriodSeconds: 10 + initContainers: + - name: init-config + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce + command: ['/bin/bash', '/etc/kafka/init.sh'] + volumeMounts: + - name: config + mountPath: /etc/kafka + - name: data + mountPath: /var/lib/zookeeper/data containers: - name: metrics image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d @@ -40,18 +49,12 @@ spec: image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS - value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties + value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties - name: JMX_PORT value: "5555" command: - - /bin/bash - - -euc - - > - export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 1)); - echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid; - sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" config/zookeeper.properties; - cat config/zookeeper.properties; - ./bin/zookeeper-server-start.sh config/zookeeper.properties + - ./bin/zookeeper-server-start.sh + - /etc/kafka/zookeeper.properties ports: - containerPort: 2181 name: client @@ -77,7 +80,7 @@ spec: - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config - mountPath: /opt/kafka/config + mountPath: /etc/kafka - name: data mountPath: /var/lib/zookeeper/data volumes: diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 6eb81d42..90dae02c 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -16,6 +16,15 @@ spec: prometheus.io/port: "5556" spec: terminationGracePeriodSeconds: 10 + initContainers: + - name: init-config + image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce + command: ['/bin/bash', '/etc/kafka/init.sh'] + volumeMounts: + - name: config + mountPath: /etc/kafka + - name: data + mountPath: /var/lib/zookeeper/data containers: - name: metrics image: solsson/kafka-prometheus-jmx-exporter@sha256:1f7c96c287a2dbec1d909cd8f96c0656310239b55a9a90d7fd12c81f384f1f7d @@ -40,18 +49,12 @@ spec: image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce env: - name: KAFKA_LOG4J_OPTS - value: -Dlog4j.configuration=file:/opt/kafka/config/log4j.properties + value: -Dlog4j.configuration=file:/etc/kafka/log4j.properties - name: JMX_PORT value: "5555" command: - - /bin/bash - - -euc - - > - export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + 4)); - echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid; - sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" config/zookeeper.properties; - cat config/zookeeper.properties; - ./bin/zookeeper-server-start.sh config/zookeeper.properties + - ./bin/zookeeper-server-start.sh + - /etc/kafka/zookeeper.properties ports: - containerPort: 2181 name: client @@ -77,7 +80,7 @@ spec: - '[ "imok" = "$(echo ruok | nc -w 1 127.0.0.1 2181)" ]' volumeMounts: - name: config - mountPath: /opt/kafka/config + mountPath: /etc/kafka - name: data mountPath: /var/lib/zookeeper/data volumes: From 082f57aa7f32bb17aca73849a910fa1318220098 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 04:54:06 +0200 Subject: [PATCH 21/22] Places the myid magic number where replicas are --- zookeeper/10zookeeper-config.yml | 7 ++----- zookeeper/51zoo.yml | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 58e5c56e..20f7823a 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -8,11 +8,8 @@ data: #!/bin/bash set -x - OFFSET=1 - case $HOSTNAME in zoo-*) - OFFSET=4 - esac - export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $OFFSET)) + [ -z "$ID_OFFSET" ] && ID_OFFSET=1 + export ZOOKEEPER_SERVER_ID=$((${HOSTNAME##*-} + $ID_OFFSET)) echo "${ZOOKEEPER_SERVER_ID:-1}" | tee /var/lib/zookeeper/data/myid sed -i "s/server\.$ZOOKEEPER_SERVER_ID\=[a-z0-9.-]*/server.$ZOOKEEPER_SERVER_ID=0.0.0.0/" /etc/kafka/zookeeper.properties diff --git a/zookeeper/51zoo.yml b/zookeeper/51zoo.yml index 90dae02c..7e39cac8 100644 --- a/zookeeper/51zoo.yml +++ b/zookeeper/51zoo.yml @@ -20,6 +20,9 @@ spec: - name: init-config image: solsson/kafka:0.11.0.0@sha256:b27560de08d30ebf96d12e74f80afcaca503ad4ca3103e63b1fd43a2e4c976ce command: ['/bin/bash', '/etc/kafka/init.sh'] + env: + - name: ID_OFFSET + value: "4" volumeMounts: - name: config mountPath: /etc/kafka From b848f85f37c50ca232be1ef7e462568b0f680453 Mon Sep 17 00:00:00 2001 From: Staffan Olsson Date: Thu, 27 Jul 2017 05:00:58 +0200 Subject: [PATCH 22/22] Stops logs from growing when zookeeper is idle --- zookeeper/10zookeeper-config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/zookeeper/10zookeeper-config.yml b/zookeeper/10zookeeper-config.yml index 20f7823a..e796b4ba 100644 --- a/zookeeper/10zookeeper-config.yml +++ b/zookeeper/10zookeeper-config.yml @@ -31,3 +31,7 @@ data: log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%d] %p %m (%c)%n + + # Suppress connection log messages, three lines per livenessProbe execution + log4j.logger.org.apache.zookeeper.server.NIOServerCnxnFactory=WARN + log4j.logger.org.apache.zookeeper.server.NIOServerCnxn=WARN