mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-04-22 19:30:07 +08:00

* the subscriber would getOrGen a local partition and wait * the publisher would getOrGen a local partition. If localPartition follower is not setup, and init message has follower info, it would create followers based on init.Messages.
267 lines
6.5 KiB
Protocol Buffer
267 lines
6.5 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package messaging_pb;
|
|
|
|
option go_package = "github.com/seaweedfs/seaweedfs/weed/pb/mq_pb";
|
|
option java_package = "seaweedfs.mq";
|
|
option java_outer_classname = "MessageQueueProto";
|
|
|
|
//////////////////////////////////////////////////
|
|
|
|
service SeaweedMessaging {
|
|
|
|
// control plane
|
|
rpc FindBrokerLeader (FindBrokerLeaderRequest) returns (FindBrokerLeaderResponse) {
|
|
}
|
|
|
|
// control plane for balancer
|
|
rpc PublisherToPubBalancer (stream PublisherToPubBalancerRequest) returns (stream PublisherToPubBalancerResponse) {
|
|
}
|
|
rpc BalanceTopics (BalanceTopicsRequest) returns (BalanceTopicsResponse) {
|
|
}
|
|
|
|
// control plane for topic partitions
|
|
rpc ListTopics (ListTopicsRequest) returns (ListTopicsResponse) {
|
|
}
|
|
rpc ConfigureTopic (ConfigureTopicRequest) returns (ConfigureTopicResponse) {
|
|
}
|
|
rpc LookupTopicBrokers (LookupTopicBrokersRequest) returns (LookupTopicBrokersResponse) {
|
|
}
|
|
|
|
// invoked by the balancer, running on each broker
|
|
rpc AssignTopicPartitions (AssignTopicPartitionsRequest) returns (AssignTopicPartitionsResponse) {
|
|
}
|
|
rpc ClosePublishers(ClosePublishersRequest) returns (ClosePublishersResponse) {
|
|
}
|
|
rpc CloseSubscribers(CloseSubscribersRequest) returns (CloseSubscribersResponse) {
|
|
}
|
|
|
|
// subscriber connects to broker balancer, which coordinates with the subscribers
|
|
rpc SubscriberToSubCoordinator (stream SubscriberToSubCoordinatorRequest) returns (stream SubscriberToSubCoordinatorResponse) {
|
|
}
|
|
|
|
// data plane for each topic partition
|
|
rpc PublishMessage (stream PublishMessageRequest) returns (stream PublishMessageResponse) {
|
|
}
|
|
rpc SubscribeMessage (SubscribeMessageRequest) returns (stream SubscribeMessageResponse) {
|
|
}
|
|
// The lead broker asks a follower broker to follow itself
|
|
rpc PublishFollowMe (stream PublishFollowMeRequest) returns (stream PublishFollowMeResponse) {
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////
|
|
|
|
message FindBrokerLeaderRequest {
|
|
string filer_group = 1;
|
|
}
|
|
|
|
message FindBrokerLeaderResponse {
|
|
string broker = 1;
|
|
}
|
|
|
|
message Topic {
|
|
string namespace = 1;
|
|
string name = 2;
|
|
}
|
|
message Partition {
|
|
int32 ring_size = 1;
|
|
int32 range_start = 2;
|
|
int32 range_stop = 3;
|
|
int64 unix_time_ns = 4;
|
|
}
|
|
|
|
message Offset {
|
|
Topic topic = 1;
|
|
repeated PartitionOffset partition_offsets = 2;
|
|
}
|
|
|
|
enum PartitionOffsetStartType {
|
|
EARLIEST = 0;
|
|
EARLIEST_IN_MEMORY = 1;
|
|
LATEST = 2;
|
|
}
|
|
|
|
message PartitionOffset {
|
|
Partition partition = 1;
|
|
int64 start_ts_ns = 2;
|
|
int64 stop_ts_ns = 3;
|
|
PartitionOffsetStartType start_type = 4;
|
|
}
|
|
|
|
//////////////////////////////////////////////////
|
|
message BrokerStats {
|
|
int32 cpu_usage_percent = 1;
|
|
map<string, TopicPartitionStats> stats = 2;
|
|
}
|
|
message TopicPartitionStats {
|
|
Topic topic = 1;
|
|
Partition partition = 2;
|
|
int32 consumer_count = 3;
|
|
bool is_leader = 4;
|
|
}
|
|
|
|
|
|
message PublisherToPubBalancerRequest {
|
|
message InitMessage {
|
|
string broker = 1;
|
|
}
|
|
oneof message {
|
|
InitMessage init = 1;
|
|
BrokerStats stats = 2;
|
|
}
|
|
}
|
|
message PublisherToPubBalancerResponse {
|
|
}
|
|
|
|
message BalanceTopicsRequest {
|
|
}
|
|
message BalanceTopicsResponse {
|
|
}
|
|
|
|
//////////////////////////////////////////////////
|
|
message ConfigureTopicRequest {
|
|
Topic topic = 1;
|
|
int32 partition_count = 2;
|
|
}
|
|
message ConfigureTopicResponse {
|
|
repeated BrokerPartitionAssignment broker_partition_assignments = 2;
|
|
}
|
|
message ListTopicsRequest {
|
|
}
|
|
message ListTopicsResponse {
|
|
repeated Topic topics = 1;
|
|
}
|
|
message LookupTopicBrokersRequest {
|
|
Topic topic = 1;
|
|
}
|
|
message LookupTopicBrokersResponse {
|
|
Topic topic = 1;
|
|
repeated BrokerPartitionAssignment broker_partition_assignments = 2;
|
|
}
|
|
message BrokerPartitionAssignment {
|
|
Partition partition = 1;
|
|
string leader_broker = 2;
|
|
repeated string follower_brokers = 3;
|
|
}
|
|
|
|
message AssignTopicPartitionsRequest {
|
|
Topic topic = 1;
|
|
repeated BrokerPartitionAssignment broker_partition_assignments = 2;
|
|
bool is_leader = 3;
|
|
bool is_draining = 4;
|
|
}
|
|
message AssignTopicPartitionsResponse {
|
|
}
|
|
|
|
message SubscriberToSubCoordinatorRequest {
|
|
message InitMessage {
|
|
string consumer_group = 1;
|
|
string consumer_group_instance_id = 2;
|
|
Topic topic = 3;
|
|
}
|
|
message AckMessage {
|
|
Partition partition = 1;
|
|
int64 ts_ns = 2;
|
|
}
|
|
oneof message {
|
|
InitMessage init = 1;
|
|
AckMessage ack = 2;
|
|
}
|
|
}
|
|
message SubscriberToSubCoordinatorResponse {
|
|
message Assignment {
|
|
int64 generation = 1;
|
|
repeated BrokerPartitionAssignment partition_assignments = 2;
|
|
}
|
|
oneof message {
|
|
Assignment assignment = 1;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////
|
|
message DataMessage {
|
|
bytes key = 1;
|
|
bytes value = 2;
|
|
int64 ts_ns = 3;
|
|
}
|
|
message PublishMessageRequest {
|
|
message InitMessage {
|
|
Topic topic = 1;
|
|
Partition partition = 2;
|
|
int32 ack_interval = 3;
|
|
repeated string follower_brokers = 4;
|
|
}
|
|
oneof message {
|
|
InitMessage init = 1;
|
|
DataMessage data = 2;
|
|
}
|
|
int64 sequence = 3;
|
|
}
|
|
message PublishMessageResponse {
|
|
int64 ack_sequence = 1;
|
|
string error = 2;
|
|
bool should_close = 3;
|
|
}
|
|
message PublishFollowMeRequest {
|
|
message InitMessage {
|
|
Topic topic = 1;
|
|
Partition partition = 2;
|
|
}
|
|
message FlushMessage {
|
|
int64 ts_ns = 1;
|
|
}
|
|
message CloseMessage {
|
|
}
|
|
oneof message {
|
|
InitMessage init = 1;
|
|
DataMessage data = 2;
|
|
FlushMessage flush = 3;
|
|
CloseMessage close = 4;
|
|
}
|
|
}
|
|
message PublishFollowMeResponse {
|
|
int64 ack_ts_ns = 1;
|
|
}
|
|
message SubscribeMessageRequest {
|
|
message InitMessage {
|
|
string consumer_group = 1;
|
|
string consumer_id = 2;
|
|
string client_id = 3;
|
|
Topic topic = 4;
|
|
PartitionOffset partition_offset = 5;
|
|
string filter = 6;
|
|
repeated string follower_brokers = 7;
|
|
}
|
|
message AckMessage {
|
|
int64 sequence = 1;
|
|
}
|
|
oneof message {
|
|
InitMessage init = 1;
|
|
AckMessage ack = 2;
|
|
}
|
|
}
|
|
message SubscribeMessageResponse {
|
|
message CtrlMessage {
|
|
string error = 1;
|
|
bool is_end_of_stream = 2;
|
|
bool is_end_of_topic = 3;
|
|
}
|
|
oneof message {
|
|
CtrlMessage ctrl = 1;
|
|
DataMessage data = 2;
|
|
}
|
|
}
|
|
message ClosePublishersRequest {
|
|
Topic topic = 1;
|
|
int64 unix_time_ns = 2;
|
|
}
|
|
message ClosePublishersResponse {
|
|
}
|
|
message CloseSubscribersRequest {
|
|
Topic topic = 1;
|
|
int64 unix_time_ns = 2;
|
|
}
|
|
message CloseSubscribersResponse {
|
|
}
|