Ottomata has uploaded a new change for review.
https://gerrit.wikimedia.org/r/79927
Change subject: Adding kafka-mirror package for kafka-mirror init.d scripts.
......................................................................
Adding kafka-mirror package for kafka-mirror init.d scripts.
Change-Id: Ifeb932d4afbb185da40f6660142313b3123a7d15
---
M debian/control
A debian/kafka-mirror.default
A debian/kafka-mirror.init
A debian/kafka-mirror.install
4 files changed, 298 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/debs/kafka
refs/changes/27/79927/1
diff --git a/debian/control b/debian/control
index 30c189c..2c94955 100644
--- a/debian/control
+++ b/debian/control
@@ -50,3 +50,12 @@
maintaining per-partition ordering semantics.
* Support for parallel data load into Hadoop.
+Package: kafka-mirror
+Architecture: all
+Depends: default-jre, scala-library, adduser, ${java:Depends},
${misc:Depends}, kafka
+Recommends: ${java:Recommends}
+Description: Init scripts for Apache Kafka MirrorMaker.
+ Apache Kafka's MirrorMaker tool makes it possible to maintain a
+ replica of an existing Kafka cluster. This is useful for
+ inter-datacenter replication. See:
+
https://cwiki.apache.org/confluence/display/KAFKA/Kafka+mirroring+%28MirrorMaker%29
diff --git a/debian/kafka-mirror.default b/debian/kafka-mirror.default
new file mode 100644
index 0000000..7dfc5d8
--- /dev/null
+++ b/debian/kafka-mirror.default
@@ -0,0 +1,34 @@
+# whether to allow init.d script to start a kafka broker ("yes", "no")
+KAFKA_MIRROR_START=no
+
+# The default JMX_PORT for Kafka Mirror Makers is 9993.
+# Set JMX_PORT to something else to override this.
+# JMX_PORT=9993
+
+# JMX options
+KAFKA_JMX_OPTS=${KAFKA_JMX_OPTS:="-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"}
+
+# Memory sizes, and logging configuration
+KAFKA_OPTS=${KAFKA_OPTS:="-Xmx512M -server
-Dlog4j.configuration=file:/etc/kafka/log4j.properties"}
+
+# User and group to run as
+KAFKA_USER=kafka
+KAFKA_GROUP=kafka
+
+#
+# MirrorMaker options:
+#
+# Set this to a space separated list of consumer.properties files.
+# By default, /etc/init.d/kafka-mirror will use any files that match
+# /etc/kafka/mirror/consumer.*
+#KAFKA_MIRROR_CONSUMER_CONFIGS=
+
+#KAFKA_MIRROR_PRODUCER_CONFIG=/etc/kafka/mirror/producer.properties
+
+# Only set one of the following.
+#KAFKA_MIRROR_WHITELIST='.*'
+#KAFKA_MIRROR_BLACKLIST=''
+
+#KAFKA_MIRROR_NUM_STREAMS=1
+#KAFKA_MIRROR_NUM_PRODUCERS=1
+#KAFKA_MIRROR_QUEUE_SIZE=10000
diff --git a/debian/kafka-mirror.init b/debian/kafka-mirror.init
new file mode 100644
index 0000000..2298214
--- /dev/null
+++ b/debian/kafka-mirror.init
@@ -0,0 +1,253 @@
+#!/bin/sh
+#
+# /etc/init.d/kafka -- startup script for the kafka distributed
publish-subscribe messaging system
+#
+# Written by Alexandros Kosiaris <[email protected]>
+#
+### BEGIN INIT INFO
+# Provides: kafka
+# Required-Start: $local_fs $remote_fs $network
+# Required-Stop: $local_fs $remote_fs $network
+# Should-Start: $named
+# Should-Stop: $named
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start kafka
+# Description: Start the kafka distributed publish-subscribe messaging
system
+### END INIT INFO
+
+set -e
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+NAME="$(basename "$0" | sed 's/^[KS][0-9]\{2\}//')"
+DESC="Kafka Mirror Maker"
+DEFAULT=/etc/default/$NAME
+
+if [ `id -u` -ne 0 ]; then
+ echo "You need root privileges to run this script"
+ exit 1
+fi
+
+# Make sure kafka is started with system locale
+if [ -r /etc/default/locale ]; then
+ . /etc/default/locale
+ export LANG
+fi
+
+. /lib/lsb/init-functions
+
+if [ -r /etc/default/rcS ]; then
+ . /etc/default/rcS
+fi
+
+# The following variables can be overwritten in $DEFAULT
+
+# Run kafka as this user ID and group ID
+KAFKA_USER=kafka
+KAFKA_GROUP=kafka
+KAFKA_START=yes
+KAFKA_CONFIG=/etc/kafka
+
+# Read in consumer config files from /etc/kafka/mirror.
+KAFKA_MIRROR_CONSUMER_CONFIGS=$(ls $KAFKA_CONFIG/mirror/consumer.* || true) #
Don't error out yet if files don't exist.
+KAFKA_MIRROR_PRODUCER_CONFIG=$KAFKA_CONFIG/mirror/producer.properties
+
+KAFKA_MIRROR_NUM_STREAMS=1
+KAFKA_MIRROR_NUM_PRODUCERS=1
+KAFKA_MIRROR_QUEUE_SIZE=10000
+KAFKA_MIRROR_WHITELIST='.*'
+KAFKA_MIRROR_BLACKLIST=''
+
+JDK_DIRS="/usr/lib/jvm/default-java /usr/lib/jvm/java-6-sun
/usr/lib/jvm/java-1.5.0-sun /usr/lib/j2sdk1.5-sun /usr/lib/j2sdk1.5-ibm"
+
+# Look for the right JVM to use.
+for jdir in $JDK_DIRS; do
+ if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
+ JAVA_HOME="$jdir"
+ fi
+done
+export JAVA_HOME
+
+# Default Java options
+# Set java.awt.headless=true if JAVA_OPTS is not set so the
+# Xalan XSL transformer can work without X11 display on JDK 1.4+
+if [ -z "$JAVA_OPTS" ]; then
+ JAVA_OPTS="-Djava.awt.headless=true"
+fi
+
+# End of variables that can be overwritten in $DEFAULT
+
+# overwrite settings from default file
+if [ -f "$DEFAULT" ]; then
+ . "$DEFAULT"
+fi
+
+# Setting the classpath to all the needed dependencies.
+CLASSPATH=$CLASSPATH:/usr/share/java/scala-library.jar:/usr/share/java/jetty.jar:/usr/share/java/jetty-util.jar:/usr/share/java/zookeeper.jar:/usr/share/java/velocity-1.7.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/servlet-api-2.5.jar:/usr/share/java/jsp-api-2.1.jar:/usr/share/java/qdox.jar:/usr/share/java/paranamer.jar:/usr/share/java/oro.jar:/usr/share/java/objenesis.jar:/usr/share/java/log4j-1.2-1.2.16.jar:/usr/share/java/junit4.jar:/usr/share/java/joda-time.jar:/usr/share/java/jets3t.jar:/usr/share/java/jackson-core.jar:/usr/share/java/jackson-mapper.jar:/usr/share/java/hsqldb.jar:/usr/share/java/commons-cli.jar:/usr/share/java/commons-codec.jar:/usr/share/java/commons-collections.jar:/usr/share/java/commons-compress.jar:/usr/share/java/commons-el.jar:/usr/share/java/commons-httpclient.jar:/usr/share/java/commons-io.jar:/usr/share/java/commons-lang.jar:/usr/share/java/commons-logging.jar:/usr/share/java/commons-net.jar:/usr/share/java/cglib.jar:/usr/share/java/asm3.jar:/usr/share/java/snappy-java-1.0.4.1.jar:/usr/share/java/jasper-runtime-5.5.12.jar:/usr/share/java/jsp-api-2.1-6.1.14.jar:/usr/share/java/avro-1.4.0.jar:/usr/share/java/kfs-0.3.jar:/usr/share/java/jsp-2.1-6.1.14.jar:/usr/share/java/scalatest-1.2.jar:/usr/share/java/paranamer-ant-2.2.jar:/usr/share/java/paranamer-generator-2.2.jar:/usr/share/java/pig-0.8.0.jar:/usr/share/java/zkclient-0.3.jar:/usr/share/java/easymock-3.0.jar:/usr/share/java/jasper-compiler-5.5.12.jar:/usr/share/java/hadoop-core-0.20.2.jar:/usr/share/java/xmlenc-0.52.jar:/usr/share/java/jopt-simple-3.2.jar:/usr/share/kafka/kafka.jar:/usr/share/kafka/hadoop-consumer.jar:/usr/share/kafka/hadoop-producer.jar:/usr/share/kafka/kafka-kafka-examples.jar:/usr/share/kafka/kafka-perf.jar:/usr/share/java/metrics-annotation-2.2.0.jar:/usr/share/java/metrics-core-2.2.0.jar
+
+# Define other required variables
+KAFKA_MIRROR_PID="/var/run/$NAME.pid"
+
+#
+# MirrorMaker argument checking:
+#
+
+if [ -z $KAFKA_MIRROR_CONSUMER_CONFIGS ]; then
+ echo "No consumer config files provided."
+ exit 1
+fi
+if [ -z $KAFKA_MIRROR_PRODUCER_CONFIG ]; then
+ echo "No producer config file provided."
+ exit 1
+fi
+
+if [ -n "$KAFKA_MIRROR_WHITELIST" -a -n "$KAFKA_MIRROR_BLACKLIST" ]; then
+ echo "Must set exactly one of KAFKA_MIRROR_WHITELIST and
KAFKA_MIRROR_BLACKLIST, not both."
+ exit 1
+elif [ -z "$KAFKA_MIRROR_WHITELIST" -a -z "$KAFKA_MIRROR_BLACKLIST"]; then
+ echo "Must set exactly one of KAFKA_MIRROR_WHITELIST or
KAFKA_MIRROR_BLACKLIST."
+ exit 1
+fi
+
+if [ ! -r $KAFKA_MIRROR_PRODUCER_CONFIG ]; then
+ echo "Cannot read producer config file '$KAFKA_MIRROR_PRODUCER_CONFIG'."
+ exit 1
+fi
+
+
+kafka_mirror_sh() {
+ # Escape any double quotes in the value of JAVA_OPTS
+ JAVA_OPTS="$(echo $JAVA_OPTS | sed 's/\"/\\\"/g')"
+ JMX_PORT=${JMX_PORT:-9993}
+ KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS
-Dcom.sun.management.jmxremote.port=$JMX_PORT"
+
+ # Define the command to run kafka as a daemon
+ # set -a tells sh to export assigned variables to spawned shells.
+ KAFKA_MIRROR_ARGS="$JAVA_OPTS \
+ $KAFKA_OPTS \
+ $KAFKA_JMX_OPTS \
+ -cp $CLASSPATH \
+ kafka.tools.MirrorMaker \
+ --num.streams $KAFKA_MIRROR_NUM_STREAMS \
+ --num.producers $KAFKA_MIRROR_NUM_PRODUCERS \
+ --queue.size $KAFKA_MIRROR_QUEUE_SIZE \
+ --producer.config $KAFKA_MIRROR_PRODUCER_CONFIG"
+
+ if [ -n "$KAFKA_MIRROR_WHITELIST" ]; then
+ $KAFKA_MIRROR_ARGS = "$KAFKA_MIRROR_ARGS --whitelist
'$KAFKA_MIRROR_WHITELIST' "
+ else
+ $KAFKA_MIRROR_ARGS = "$KAFKA_MIRROR_ARGS --blacklist
'$KAFKA_MIRROR_BLACKLIST' "
+ fi
+
+ # Add all consumer config files to KAFKA_MIRROR_ARGS
+ for CONSUMER_CONFIG in $KAFKA_MIRROR_CONSUMER_CONFIGS; do
+ KAFKA_MIRROR_ARGS="$KAFKA_MIRROR_ARGS --consumer.config
$CONSUMER_CONFIG"
+ done
+
+ # Run as a daemon
+ set +e
+
+ start-stop-daemon --start -b -u "$KAFKA_USER" -g "$KAFKA_GROUP" \
+ -c "$KAFKA_USER" -m -p "$KAFKA_MIRROR_PID" \
+ -x "$JAVA_HOME/bin/java" -- $KAFKA_MIRROR_ARGS
+ status="$?"
+ set +a -e
+ return $status
+}
+
+case "$1" in
+ start)
+ if [ -z "$JAVA_HOME" ]; then
+ log_failure_msg "no JDK found - please set JAVA_HOME"
+ exit 1
+ fi
+
+ if [ -n "$KAFKA_MIRROR_START" -a "$KAFKA_MIRROR_START" != "yes" ]; then
+ log_failure_msg "KAFKA_MIRROR_START not set to 'yes' in
$DEFAULT, not starting"
+ exit 0
+ fi
+
+ log_daemon_msg "Starting $DESC" "$NAME"
+ if start-stop-daemon --test --start --pidfile "$KAFKA_MIRROR_PID" \
+ --user $KAFKA_USER --exec "$JAVA_HOME/bin/java" \
+ >/dev/null; then
+
+ kafka_mirror_sh start
+ sleep 5
+ if start-stop-daemon --test --start --pidfile
"$KAFKA_MIRROR_PID" \
+ --user $KAFKA_USER --exec "$JAVA_HOME/bin/java" \
+ >/dev/null; then
+ if [ -f "$KAFKA_MIRROR_PID" ]; then
+ rm -f "$KAFKA_MIRROR_PID"
+ fi
+ log_end_msg 1
+ else
+ log_end_msg 0
+ fi
+ else
+ log_progress_msg "(already running)"
+ log_end_msg 0
+ fi
+ ;;
+ stop)
+ log_daemon_msg "Stopping $DESC" "$NAME"
+
+ set +e
+ if [ -f "$KAFKA_MIRROR_PID" ]; then
+ start-stop-daemon --stop --pidfile "$KAFKA_MIRROR_PID" \
+ --user "$KAFKA_USER" \
+ --retry=TERM/20/KILL/5 >/dev/null
+ if [ $? -eq 1 ]; then
+ log_progress_msg "$DESC is not running but pid file
exists, cleaning up"
+ elif [ $? -eq 3 ]; then
+ PID="`cat $KAFKA_MIRROR_PID`"
+ log_failure_msg "Failed to stop $NAME (pid $PID)"
+ exit 1
+ fi
+ rm -f "$KAFKA_MIRROR_PID"
+ else
+ log_progress_msg "(not running)"
+ fi
+ log_end_msg 0
+ set -e
+ ;;
+ status)
+ set +e
+ start-stop-daemon --test --start --pidfile "$KAFKA_MIRROR_PID" \
+ --user $KAFKA_USER --exec "$JAVA_HOME/bin/java" \
+ >/dev/null 2>&1
+ if [ "$?" = "0" ]; then
+
+ if [ -f "$KAFKA_MIRROR_PID" ]; then
+ log_success_msg "$DESC is not running, but pid file
exists."
+ exit 1
+ else
+ log_success_msg "$DESC is not running."
+ exit 3
+ fi
+ else
+ log_success_msg "$DESC is running with pid `cat
$KAFKA_MIRROR_PID`"
+ fi
+ set -e
+ ;;
+ restart|force-reload)
+ if [ -f "$KAFKA_MIRROR_PID" ]; then
+ $0 stop
+ sleep 1
+ fi
+ $0 start
+ ;;
+ try-restart)
+ if start-stop-daemon --test --start --pidfile
"$KAFKA_MIRROR_PID" \
+ --user $KAFKA_USER --exec "$JAVA_HOME/bin/java" \
+ >/dev/null; then
+ $0 start
+ fi
+ ;;
+ *)
+ log_success_msg "Usage: $0
{start|stop|restart|try-restart|force-reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/debian/kafka-mirror.install b/debian/kafka-mirror.install
new file mode 100644
index 0000000..1991ebc
--- /dev/null
+++ b/debian/kafka-mirror.install
@@ -0,0 +1,2 @@
+config/consumer.properties etc/kafka/mirror
+config/producer.properties etc/kafka/mirror
--
To view, visit https://gerrit.wikimedia.org/r/79927
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifeb932d4afbb185da40f6660142313b3123a7d15
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/kafka
Gerrit-Branch: debian
Gerrit-Owner: Ottomata <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits