2017-06-30 4 views
0

私はKafka 0.10.1.1を使用し、カスタムオーソライザを使用しています。Kafkaカスタムオーソライザ

カスタムオーソライザから、私はオーソライズのためにマイクロサービスを呼び出します。それはしばらくの間うまく動作し、次の例外をログに投げかけ、クラスタ全体が応答しなくなります。例外は、クラスタを再起動するまで保持され続けます。しかし、クラスタ全体は、カスタムオーソライザなしで何ヶ月も問題がなくても正常に動作します。 Kafkaバージョン0.10.1.1にバグがありますか、カスタムオーソライザに何か問題がありますか?

TRACE [ReplicaFetcherThread-0-39], Issuing to broker 1 of fetch request [email protected] (kafka.server.ReplicaFetcherThread) 
[2017-06-30 08:29:17,473] TRACE [ReplicaFetcherThread-2-1], Issuing to broker 1 of fetch request [email protected] (kafka.server.ReplicaFetcherThread) 
[2017-06-30 08:29:17,473] WARN [ReplicaFetcherThread-3-1], Error in fetch [email protected] (kafka.server.ReplicaFetcherThread) 
java.io.IOException: Connection to <HOST:PORT> (id: 1 rack: null) failed 
     at kafka.utils.NetworkClientBlockingOps$.awaitReady$1(NetworkClientBlockingOps.scala:83) 
     at kafka.utils.NetworkClientBlockingOps$.blockingReady$extension(NetworkClientBlockingOps.scala:93) 
     at kafka.server.ReplicaFetcherThread.sendRequest(ReplicaFetcherThread.scala:248) 
     at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:238) 
     at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:42) 
     at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:118) 
     at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:103) 
     at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63) 

マイカスタム承認者は、10分の有効期限とグアバキャッシュでの承認およびキャッシュデータをチェックするためmicroserviceを使用しています。

おかげ

答えて

1

私は、すべてのスレッドが何をしているかを確認するために、スレッドダンプを取ることをお勧めします。

ここで推測すると、そこに行く情報はあまりありません。 キャッシュ・インスタンスが1つの場合、キャッシュが期限切れになると、すべての要求が認可情報のマイクロサービスに当たることになり、レイテンシが追加されるためスレッド・プールが使い尽くされます。スレッドダンプによって、マイクロサービスを同時に呼び出しているスレッドの数がわかります。

これが実際に問題がある場合、考慮できるオプションの1つは、スレッドローカル変数を使用してスレッドごとに別々のキャッシュを使用することです。そうすることで、各スレッドのキャッシュはそれ自身の時間で期限切れとなり、正確に同じ時間に他のスレッドがマイクロサービスに当たることはありません。

もう1つ、より良い方法は、マイクロサービスへのブロッキングコールを完全に許可コードパスから削除することです。フォールスルーキャッシュの代わりに、別のバックグラウンドスレッドからキャッシュを更新することにより、キャッシュを常に最新の状態に保つことができます。この方法では、許可呼び出しに待ち時間が追加されることはありません。

関連する問題