2828import org .apache .kafka .image .MetadataImage ;
2929import org .apache .kafka .metadata .BrokerRegistration ;
3030
31+ import com .automq .stream .utils .Threads ;
32+
3133import org .slf4j .Logger ;
3234import org .slf4j .LoggerFactory ;
3335
3941import java .util .Objects ;
4042import java .util .Optional ;
4143import java .util .concurrent .CopyOnWriteArrayList ;
44+ import java .util .concurrent .TimeUnit ;
4245import java .util .stream .Collectors ;
4346
4447import software .amazon .awssdk .annotations .NotNull ;
@@ -57,7 +60,7 @@ class ProxyNodeMapping {
5760 private final MetadataCache metadataCache ;
5861 private final List <ProxyTopologyChangeListener > listeners = new CopyOnWriteArrayList <>();
5962
60- volatile Map <String , Map <Integer , BrokerRegistration >> main2proxyByRack = new HashMap <>();
63+ volatile Map <String /* proxy rack */ , Map <Integer /* main nodeId */ , BrokerRegistration /* proxy */ >> main2proxyByRack = new HashMap <>();
6164 volatile boolean inited = false ;
6265
6366 public ProxyNodeMapping (Node currentNode , String currentRack , String interBrokerListenerName ,
@@ -66,6 +69,7 @@ public ProxyNodeMapping(Node currentNode, String currentRack, String interBroker
6669 this .currentNode = currentNode ;
6770 this .currentRack = currentRack ;
6871 this .metadataCache = metadataCache ;
72+ Threads .COMMON_SCHEDULER .scheduleWithFixedDelay (() -> logMapping (main2proxyByRack ), 1 , 1 , TimeUnit .MINUTES );
6973 }
7074
7175 /**
@@ -215,6 +219,7 @@ public void onChange(MetadataDelta delta, MetadataImage image) {
215219 });
216220 });
217221 this .main2proxyByRack = calMain2proxyByRack (rack2brokers );
222+ logMapping (main2proxyByRack );
218223 notifyListeners (this .main2proxyByRack );
219224 }
220225
@@ -354,6 +359,18 @@ static void tryFreeController(List<ProxyNode> proxyNodes, double avg) {
354359 }
355360 }
356361
362+
363+
364+ static void logMapping (Map <String , Map <Integer , BrokerRegistration >> main2proxyByRack ) {
365+ StringBuilder sb = new StringBuilder ();
366+ main2proxyByRack .forEach ((rack , main2proxy ) ->
367+ main2proxy .forEach ((mainNodeId , proxyNode ) ->
368+ sb .append (" Main " ).append (mainNodeId ).append (" => Proxy " ).append (proxyNode .id ()).append ("(" ).append (rack ).append (")\n " )
369+ )
370+ );
371+ LOGGER .info ("ProxyNodeMapping:\n {}" , sb );
372+ }
373+
357374 static class ProxyNode implements thirdparty .com .github .jaskey .consistenthash .Node , Comparable <ProxyNode > {
358375 final BrokerRegistration node ;
359376 final List <Integer > mainNodeIds = new ArrayList <>();
0 commit comments