Event Streams の既知の制約事項
Event Streamsの使用中に問題が発生した場合は、以下の既知の制約事項と回避策を確認してください。
Kafka ブートストラップ・サーバーで障害が起こっても Java Kafka 呼び出しがフェイルオーバーしない
問題
Java™ 仮想マシン (JVM) は DNS ルックアップをキャッシュに入れます。 JVM は、ホスト名の IP アドレスを解決するときに、指定された期間 (存続時間 (TTL) と呼ばれる)、IP アドレスをキャッシュに入れます。 一部の Java 構成では、JVM が再始動されるまでホスト名の IP アドレスをリフレッシュしないように JVM TTL を設定します。 そういった構成の 1 つの例が、セキュリティー・マネージャーを含む構成です。
回避策
Event Streams では高可用性のために複数の Kafka ブートストラップ・サーバー URL と複数の IP アドレスを使用します。そのため、すべてのブローカー IP アドレスが Kafka クライアントに認識されるとは限らず、それが原因となって、作動しているブローカーへのフェイルオーバーが妨げられます。 このような場合、フェイルオーバーでは、有効な IP アドレスを取得するためにブローカー URL の IP アドレスの要求が必要になります。 TTL 値を 30 秒から 60 秒までの値に設定して JVM を構成することをお勧めします。 この値により、ブートストラップ・サーバーの IP アドレスに問題がある場合に、Kafka クライアントが DNS を照会して新しい IP アドレスを検索し、使用できるようになります。
java.security
ファイルの以下の例を参照してください。
# The Java-level namelookup cache policy for successful lookups:
#
# any negative value: caching forever
# any positive value: the number of seconds to cache an address for
# zero: do not cache
#
# default value is forever (FOREVER). For security reasons, this
# caching is made forever when a security manager is set. When a security
# manager is not set, the default behavior in this implementation
# is to cache for 30 seconds.
#
# NOTE: setting this to anything other than the default value can have
# serious security implications. Do not set it unless
# you are sure you are not exposed to DNS spoofing attack.
#
#networkaddress.cache.ttl=-1
JVM の TTL を変更する方法
-
すべてのアプリケーションの JVM の TTL を変更するには、
<$JAVA_HOME>/jre/lib/security/java.security
ファイルでnetworkaddress.cache.ttl
値を設定します。 -
特定のアプリケーションの JVM TTL を変更するには、アプリケーション・コードで
networkaddress.cache.ttl
を設定します。java.security.Security.setProperty("networkaddress.cache.ttl" , "30");
Java Kafka 呼び出しがタイムアウトになることがある
問題
Kafka Java クライアント呼び出しで Kafka を検出できないことがあります。 障害の原因は、Kafka クライアントがブートストラップ・サーバーごとに同じ障害 IP アドレスを判別したことです。 Kafka クライアントは、各ブローカーの IP アドレス (障害が起こっている同じ IP アドレス) を試し、Kafka がダウンしているという誤った判断を下します。 DNS 照会で複数の IP アドレスが返された場合、Kafka クライアントは、リストで返された最初の IP アドレスを使用します。
回避策
ブローカー URL の JVM DNS キャッシュの有効期限が切れるまで待機してから、呼び出しを再試行してください。 後続の Kafka 呼び出しでは、作動中のブローカー IP アドレスが DNS 照会から返されます。
Kafka Improvement Proposal (KIP) #302 ( Kafka 2.1.1 からオプションとして使用可能で、 2.6.0からデフォルトで組み込まれています) は、 Kafka クライアントが使用可能なすべてのブローカー IP アドレスを試行し、サブセットを試行しないようにするため、単一 IP アドレスで障害が発生することはありません。
以下のいずれかの方法を使用して、この機能を利用するように指定する必要があります。
-
以下のように、構成パラメーター
client.dns.lookup
の Consumer プロパティーと Producer プロパティーに新しい許可値を指定します。client.dns.lookup: "use_all_dns_ips"
-
定数
CommonClientConfigs.CLIENT_DNS_LOOKUP_CONFIG: ClientDnsLookup.USE_ALL_DNS_IPS
を使用します。
トピックとパーティション
- トピック名は最大 200 文字に制限されています。
- トピックのデフォルトのパーティション数は 1 つです。
Kafka でのトピックの作成および削除
Kafka では、トピックの作成および削除は非同期操作であり、完了するのに時間がかかることがあります。 トピックの迅速な作成と削除、またはトピックの迅速な削除と再作成に依存する使用パターンを回避します。