5 echo "USAGE: $0 [-daemon] [-name servicename] [-loggc] classname [opts]"
9 # CYGINW == 1 if Cygwin is detected, else 0.
10 if [[ $(uname -a) =~ "CYGWIN" ]]; then
16 if [ -z "$INCLUDE_TEST_JARS" ]; then
17 INCLUDE_TEST_JARS=false
20 # Exclude jars not necessary for running commands.
21 regex="(-(test|src|scaladoc|javadoc)\.jar|jar.asc)$"
22 should_include_file() {
23 if [ "$INCLUDE_TEST_JARS" = true ]; then
27 if [ -z "$(echo "$file" | egrep "$regex")" ] ; then
34 base_dir=$(dirname $0)/..
36 if [ -z "$SCALA_VERSION" ]; then
40 if [ -z "$SCALA_BINARY_VERSION" ]; then
41 SCALA_BINARY_VERSION=$(echo $SCALA_VERSION | cut -f 1-2 -d '.')
44 # run ./gradlew copyDependantLibs to get all dependant jars in a local dir
46 for dir in "$base_dir"/core/build/dependant-libs-${SCALA_VERSION}*;
48 if [ -z "$CLASSPATH" ] ; then
51 CLASSPATH="$CLASSPATH:$dir/*"
55 for file in "$base_dir"/examples/build/libs/kafka-examples*.jar;
57 if should_include_file "$file"; then
58 CLASSPATH="$CLASSPATH":"$file"
62 for file in "$base_dir"/clients/build/libs/kafka-clients*.jar;
64 if should_include_file "$file"; then
65 CLASSPATH="$CLASSPATH":"$file"
69 for file in "$base_dir"/streams/build/libs/kafka-streams*.jar;
71 if should_include_file "$file"; then
72 CLASSPATH="$CLASSPATH":"$file"
76 for file in "$base_dir"/streams/examples/build/libs/kafka-streams-examples*.jar;
78 if should_include_file "$file"; then
79 CLASSPATH="$CLASSPATH":"$file"
83 for file in "$base_dir"/streams/build/dependant-libs-${SCALA_VERSION}/rocksdb*.jar;
85 CLASSPATH="$CLASSPATH":"$file"
88 for file in "$base_dir"/tools/build/libs/kafka-tools*.jar;
90 if should_include_file "$file"; then
91 CLASSPATH="$CLASSPATH":"$file"
95 for dir in "$base_dir"/tools/build/dependant-libs-${SCALA_VERSION}*;
97 CLASSPATH="$CLASSPATH:$dir/*"
100 for cc_pkg in "api" "transforms" "runtime" "file" "json" "tools"
102 for file in "$base_dir"/connect/${cc_pkg}/build/libs/connect-${cc_pkg}*.jar;
104 if should_include_file "$file"; then
105 CLASSPATH="$CLASSPATH":"$file"
108 if [ -d "$base_dir/connect/${cc_pkg}/build/dependant-libs" ] ; then
109 CLASSPATH="$CLASSPATH:$base_dir/connect/${cc_pkg}/build/dependant-libs/*"
113 # classpath addition for release
114 for file in "$base_dir"/libs/*;
116 if should_include_file "$file"; then
117 CLASSPATH="$CLASSPATH":"$file"
121 for file in "$base_dir"/core/build/libs/kafka_${SCALA_BINARY_VERSION}*.jar;
123 if should_include_file "$file"; then
124 CLASSPATH="$CLASSPATH":"$file"
130 if [ -z "$KAFKA_JMX_OPTS" ]; then
131 KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false "
135 if [ $JMX_PORT ]; then
136 KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
139 # Log directory to use
140 if [ "x$LOG_DIR" = "x" ]; then
141 LOG_DIR="$base_dir/logs"
145 if [ -z "$KAFKA_LOG4J_OPTS" ]; then
146 # Log to console. This is a tool.
147 LOG4J_DIR="$base_dir/config/tools-log4j.properties"
148 # If Cygwin is detected, LOG4J_DIR is converted to Windows format.
149 (( CYGWIN )) && LOG4J_DIR=$(cygpath --path --mixed "${LOG4J_DIR}")
150 KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:${LOG4J_DIR}"
152 # create logs directory
153 if [ ! -d "$LOG_DIR" ]; then
158 # If Cygwin is detected, LOG_DIR is converted to Windows format.
159 (( CYGWIN )) && LOG_DIR=$(cygpath --path --mixed "${LOG_DIR}")
160 KAFKA_LOG4J_OPTS="-Dkafka.logs.dir=$LOG_DIR $KAFKA_LOG4J_OPTS"
162 # Generic jvm settings you want to add
163 if [ -z "$KAFKA_OPTS" ]; then
167 # Set Debug options if enabled
168 if [ "x$KAFKA_DEBUG" != "x" ]; then
171 DEFAULT_JAVA_DEBUG_PORT="5005"
173 if [ -z "$JAVA_DEBUG_PORT" ]; then
174 JAVA_DEBUG_PORT="$DEFAULT_JAVA_DEBUG_PORT"
177 # Use the defaults if JAVA_DEBUG_OPTS was not set
178 DEFAULT_JAVA_DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=${DEBUG_SUSPEND_FLAG:-n},address=$JAVA_DEBUG_PORT"
179 if [ -z "$JAVA_DEBUG_OPTS" ]; then
180 JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
183 echo "Enabling Java debug options: $JAVA_DEBUG_OPTS"
184 KAFKA_OPTS="$JAVA_DEBUG_OPTS $KAFKA_OPTS"
188 if [ -z "$JAVA_HOME" ]; then
191 JAVA="$JAVA_HOME/bin/java"
195 if [ -z "$KAFKA_HEAP_OPTS" ]; then
196 KAFKA_HEAP_OPTS="-Xmx256M"
199 # JVM performance options
200 if [ -z "$KAFKA_JVM_PERFORMANCE_OPTS" ]; then
201 KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true"
205 while [ $# -gt 0 ]; do
210 CONSOLE_OUTPUT_FILE=$LOG_DIR/$DAEMON_NAME.out
214 if [ -z "$KAFKA_GC_LOG_OPTS" ]; then
215 GC_LOG_ENABLED="true"
230 GC_FILE_SUFFIX='-gc.log'
232 if [ "x$GC_LOG_ENABLED" = "xtrue" ]; then
233 GC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIX
234 KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M"
237 # If Cygwin is detected, classpath is converted to Windows format.
238 (( CYGWIN )) && CLASSPATH=$(cygpath --path --mixed "${CLASSPATH}")
241 if [ "x$DAEMON_MODE" = "xtrue" ]; then
242 nohup $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
244 exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS $1 -cp $CLASSPATH $KAFKA_OPTS "$@"