Hi Kai: Good ideas, For this PIP, there are the following confusions:
1. Does the current bundle-data strongly depend on zk for data consistency? 2. If the data of bundle-data is dumped to system-topic, can there be a good guarantee for the real-time performance of bundle changes? 3. This seems to be an incompatible change, is there a better upgrade plan for current users? -- Thanks Xiaolong Ran Haiting Jiang <jianghait...@apache.org> 于2022年4月7日周四 15:36写道: > Hi Kai, > > Good feature. Please add more info about how to enable this in an existing > cluster. Do we plan to write bundle data to both zk and system topic > during rolling update? > > Thanks, > Haiting > > On 2022/04/07 01:35:09 Kai Wang wrote: > > Hi Pulsar community, > > > > I created a PIP to use the system topic to store the bundle load data in > the load manager. > > > > The proposal can be found: https://github.com/apache/pulsar/issues/15037 > > > > --------- > > ## Motivation > > > > Currently, Pulsar LoadManager is using Zookeeper to store the bundle > load data, when we have many bundles, this might put a lot of pressure on > Zookeeper. > > > > ## Goal > > > > This PIP proposes storing the load manager's bundle load data to a > system topic and using TableView to read it. > > > > > > > > ## Implementation > > > > Since the bundle load data is stats data, it no needs a strong > consistent guarantee. So we can use the system topic to store the load data > and use TableView to read it. > > > > > > ### System topic client > > > > > > > > Add a new SystemTopicClient calls > `LoadBalanceBundleDataSystemTopicClient` , the topic name is > `persistent://pulsar/system/__load_balance_bundle_data`, and the key is the > bundle name, value is BundleData. > > > > ```java > > public class LoadBalanceBundleDataSystemTopicClient extends > SystemTopicClientBase<LoadBalanceBundleDataEvent> { > > // ... > > } > > ``` > > > > > > > > Add new Event calls `LoadBalanceBundleDataEvent` > > > > ``` > > @Data > > public class LoadBalanceBundleDataEvent { > > > > private String bundle; > > > > private BundleData bundleData; > > } > > > > ``` > > > > > > ### ModularLoadManagerImpl > > > > > > Add a TableView in `ModularLoadManagerImpl` to replace the bundle cache > > > > ``` > > private TableView<String, BundleData> bundlesTableView; > > ``` > > > > > > ## Compatibility > > > > This feature can have both backward and forward compatibility since the > bundle data is stats data. > > > > --------- > > > > Thanks, > > Kai > > >