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

Reply via email to