|
|
@ -12,6 +12,23 @@ const ( |
|
|
|
LockBrokerBalancer = "broker_balancer" |
|
|
|
) |
|
|
|
|
|
|
|
// Balancer collects stats from all brokers.
|
|
|
|
//
|
|
|
|
// When publishers wants to create topics, it picks brokers to assign the topic partitions.
|
|
|
|
// When consumers wants to subscribe topics, it tells which brokers are serving the topic partitions.
|
|
|
|
//
|
|
|
|
// When a partition needs to be split or merged, or a partition needs to be moved to another broker,
|
|
|
|
// the balancer will let the broker tell the consumer instance to stop processing the partition.
|
|
|
|
// The existing consumer instance will flush the internal state, and then stop processing.
|
|
|
|
// Then the balancer will tell the brokers to start sending new messages in the new/moved partition to the consumer instances.
|
|
|
|
//
|
|
|
|
// Failover to standby consumer instances:
|
|
|
|
//
|
|
|
|
// A consumer group can have min and max number of consumer instances.
|
|
|
|
// For consumer instances joined after the max number, they will be in standby mode.
|
|
|
|
//
|
|
|
|
// When a consumer instance is down, the broker will notice this and inform the balancer.
|
|
|
|
// The balancer will then tell the broker to send the partition to another standby consumer instance.
|
|
|
|
type Balancer struct { |
|
|
|
Brokers cmap.ConcurrentMap[string, *BrokerStats] |
|
|
|
} |
|
|
|