2017-11-13 12 views
0

私はクラスターで実行されているヘイゼスキャストのインスタンスがあり、それらのすべてでカフカのコンシューマを実行している必要があるという要件に取り組んでいます。ヘーゼルキャストでのタイムベースエビクト

ここでは、kafkaに入ってくる各メッセージを分散マップに追加する必要があり、20秒ごとにそのエントリを追い出す必要があります。これは、存続時間と最大アイドル秒の組み合わせmap config内のパラメータ。

しかし、私が本当に望むのは、エントリが追い出されたときに、ノードのうちの1つだけがそれを処理する必要があるということです。今は、エントリの追い出しがすべてのノードに通知されています。

これ以上の情報が必要な場合は教えてください。

+0

エビクションが発生したという通知は、グローバルまたはローカルとして設定できます。グローバルとは、すべてのノードに通知されることを意味します。ローカルとは、追放されたノードのみが通知されることを意味します。 –

+0

これは素晴らしいでしょう! –

+0

私はそれを得ていると思いますが、ドキュメントには記載されておらず、リスナーともっと関係しているようです。追放者よりも。基本的には、メンバーが所有者である通知のみを受け取るように、分散マップにlocalEntryListenerを追加する必要があります。 –

答えて

1

メンバーが所有者である通知のみを受信できるように、分散マップにlocalEntryListenerを追加する必要があります。

if(map != null){ 
      map.addLocalEntryListener(new EntryAddedListener<Long, Long>() { 
       @Override 
       public void entryAdded(EntryEvent<Long, Long> event) { 
        log.info("LOCAL ENTRY ADDED : {} at {}", event, System.currentTimeMillis()); 
       } 
      }); 

上記の例はEntryAddedListenerのためのものですが、EntryEvictedListenerも同様に実装できます。

関連する問題