読者です 読者をやめる 読者になる 読者になる

Bathynomus giganteus

ダイオウグソクムシなエンジニアによる備忘録

Apache Kafka 0.8 -> 0.9 変更点

経緯

Apache Kafka 0.9.0.0の変更点を調べていて、日本語でまとめられた記事が見当たらなかったので、自分用に備忘がてら http://kafka.apache.org/documentation.html#upgrade_9_breaking の内容をまとめてみました。
※ 拙い英語力で調べていますので、誤っている可能性が多々あります。

後方互換性の無い変更

  • Java 1.6 はサポート外に。
  • Scala 2.9 はサポート外に。
  • 1000を超えるbroker IDが自動的にbroker IDを割り当てるためにデフォルトで予約されている。クラスタがその閾値を超えようとする場合、それに応じて reserved.broker.max.id を増加するようbrokerを構成する。
  • replica.lag.max.messagesを削除。パーティションのリーダーは遅延したメッセージ数を考慮にいれないで同期するレプリカを決定する。
  • replica.lag.time.max.ms は、最後にレプリカからフェッチ要求があってからの経過時間だけでなく、レプリカが最後に追いついてからの時間も参照する。レプリカは まだリーダーからのメッセージをフェッチしているが、replica.lag.time.max.ms の最新のメッセージに追いつかなかったレプリカは同期から外れることを考慮にいれる。
  • log.cleaner.enableはデフォルトではtrue。これはトピックの 'cleanup.policy=compact' を意味し、がデフォルトでログコンパクションが実施され、ヒープの128MBが log.cleaner.dedupe.buffer.size を介してクリーナープロセスに割り当てられる。トピックのコンパクションの使用状況に基づいて log.cleaner.dedupe.buffer.size と他の log.cleaner の設定値を確認することができる。
  • MirrorMaker はもはや複数ターゲットのクラスタをサポートしていない。結果、単一の ’--consumer.config' パラメータのみを受け付ける。複数ソースのクラスタをミラーするには、ソースクラスタ毎に各コンシューマー設定と一緒に、少なくとも一つのMirorMakerを必要とする。
  • org.apache.kafka.clients.tools. 配下のツールは org.apache.kafka.tools. 配下に移動。全ての付属スクリプトは通常通りに機能するが、これらのクラスをインポートしているカスタムコードだけが直接影響を受ける。
  • kafka-run-class.sh の JVM パフォーマンスオプション (KAFKA_JVM_PERFORMANCE_OPTS) のデフォルト値は変更された。
  • kafka-topics.shスクリプト (kafka.admin.TopicCommand) が失敗した場合、0以外の終了コードで終了する。
  • トピック名に '.' や '_' が使用されたためのメトリックの衝突の危険がある時に、kafka-topics.sh スクリプト (kafka.admin.TopicCommand) は警告を出力する。そして、実際に衝突する場合エラーになる。
  • kafka-console-producer.sh スクリプト (kafka.tools.ConsoleProducer) はデフォルトに古いプロデューサーではなく新しいプロデューサーを使用し、ユーザが古いプロデューサーを使用するためには 'old-producer' を明示する必要がある。
  • デフォルトでは、すべてのコマンドラインツールは標準出力ではなく、標準エラー出力にすべてのログメッセージを出力する (原文の stout は stdout の誤りと思われる)。

0.9.0.0で非推奨になった項目

  • kafka-topic.sh (kafka.admin.TopicCommand) によるtopicの変更は非推奨に。今後は kafka-configs.sh (kafka.admin.ConfigCommand) を使用する。
  • kafka-consumer-offset-checker.sh (kafka.tools.ConsumerOffsetChecker) は非推奨に。今後は kafka-consumer-groups.sh (kafka.admin.ConsumerGroupCommand) を使用する。
  • kafka.tools.ProducerPerformance クラスは非推奨。今後は、org.apache.kafka.tools.ProducerPerformance クラスを使用する (kafka-producer-perf-test.sh も新しいクラスを使用する様に変更される)。

おまけ その1

0.8.2.1から変更のあったシェルと変更内容

  • kafka-producer-perf-test.sh
# diff kafka_2.11-0.8.2.1/bin/kafka-producer-perf-test.sh kafka_2.11-0.9.0.0/bin/kafka-producer-perf-test.sh
20c20
< exec $(dirname $0)/kafka-run-class.sh kafka.tools.ProducerPerformance $@
---
> exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance $@
  • kafka-run-class.sh
# diff kafka_2.11-0.8.2.1/bin/kafka-run-class.sh kafka_2.11-0.9.0.0/bin/kafka-run-class.sh
25,33d24
< # create logs directory
< if [ "x$LOG_DIR" = "x" ]; then
<     LOG_DIR="$base_dir/logs"
< fi
<
< if [ ! -d "$LOG_DIR" ]; then
<     mkdir -p "$LOG_DIR"
< fi
<
35c26
<    SCALA_VERSION=2.10.4
---
>    SCALA_VERSION=2.10.5
43c34,35
< for file in $base_dir/core/build/dependant-libs-${SCALA_VERSION}*/*.jar;
---
> shopt -s nullglob
> for dir in $base_dir/core/build/dependant-libs-${SCALA_VERSION}*;
45c37
<   CLASSPATH=$CLASSPATH:$file
---
>   CLASSPATH=$CLASSPATH:$dir/*
68,69c60
< # classpath addition for release
< for file in $base_dir/libs/*.jar;
---
> for file in $base_dir/tools/build/libs/kafka-tools*.jar;
73a65,83
> for dir in $base_dir/tools/build/dependant-libs-${SCALA_VERSION}*;
> do
>   CLASSPATH=$CLASSPATH:$dir/*
> done
>
> for cc_pkg in "api" "runtime" "file" "json"
> do
>   for file in $base_dir/connect/${cc_pkg}/build/libs/connect-${cc_pkg}*.jar;
>   do
>     CLASSPATH=$CLASSPATH:$file
>   done
>   if [ -d "$base_dir/connect/${cc_pkg}/build/dependant-libs" ] ; then
>     CLASSPATH=$CLASSPATH:$base_dir/connect/${cc_pkg}/build/dependant-libs/*
>   fi
> done
>
> # classpath addition for release
> CLASSPATH=$CLASSPATH:$base_dir/libs/*
>
77a88
> shopt -u nullglob
88a100,104
> # Log directory to use
> if [ "x$LOG_DIR" = "x" ]; then
>     LOG_DIR="$base_dir/logs"
> fi
>
90a107
>   # Log to console. This is a tool.
91a109,113
> else
>   # create logs directory
>   if [ ! -d "$LOG_DIR" ]; then
>     mkdir -p "$LOG_DIR"
>   fi
115c137
<   KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"
---
>   KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true"
128c150
<       if [ -z "$KAFKA_GC_LOG_OPTS"] ; then
---
>       if [ -z "$KAFKA_GC_LOG_OPTS" ]; then
  • kafka-server-start.sh
# diff kafka_2.11-0.8.2.1/bin/kafka-server-start.sh kafka_2.11-0.9.0.0/bin/kafka-server-start.sh
19c19
<    echo "USAGE: $0 [-daemon] server.properties"
---
>    echo "USAGE: $0 [-daemon] server.properties [--override property=value]*"

おまけ その2

0.9.0.0で追加されたシェル (次回はこの辺りの詳細をまとめてみたいですね)

  • connect-distributed.sh
  • connect-standalone.sh
  • kafka-acls.sh
  • kafka-configs.sh
  • kafka-consumer-groups.sh
  • kafka-verifiable-consumer.sh
  • kafka-verifiable-producer.sh
  • zookeeper-security-migration.sh