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 = "MessagQueueProto"; ////////////////////////////////////////////////// service SeaweedMessaging { // control plane rpc FindBrokerLeader (FindBrokerLeaderRequest) returns (FindBrokerLeaderResponse) { } rpc AssignSegmentBrokers (AssignSegmentBrokersRequest) returns (AssignSegmentBrokersResponse) { } rpc CheckSegmentStatus (CheckSegmentStatusRequest) returns (CheckSegmentStatusResponse) { } rpc CheckBrokerLoad (CheckBrokerLoadRequest) returns (CheckBrokerLoadResponse) { } // control plane for balancer rpc ConnectToBalancer (stream ConnectToBalancerRequest) returns (stream ConnectToBalancerResponse) { } // control plane for topic partitions rpc LookupTopicBrokers (LookupTopicBrokersRequest) returns (LookupTopicBrokersResponse) { } rpc CreateTopic (CreateTopicRequest) returns (CreateTopicResponse) { } rpc DoCreateTopic (DoCreateTopicRequest) returns (DoCreateTopicResponse) { } rpc ListTopics (ListTopicsRequest) returns (ListTopicsResponse) { } // a pub client will call this to get the topic partitions assignment rpc RequestTopicPartitions (RequestTopicPartitionsRequest) returns (RequestTopicPartitionsResponse) { } rpc AssignTopicPartitions (AssignTopicPartitionsRequest) returns (AssignTopicPartitionsResponse) { } rpc CheckTopicPartitionsStatus (CheckTopicPartitionsStatusRequest) returns (CheckTopicPartitionsStatusResponse) { } // data plane rpc Publish (stream PublishRequest) returns (stream PublishResponse) { } rpc Subscribe (SubscribeRequest) returns (stream SubscribeResponse) { } } ////////////////////////////////////////////////// message SegmentInfo { Segment segment = 1; int64 start_ts_ns = 2; repeated string brokers = 3; int64 stop_ts_ns = 4; repeated int32 previous_segments = 5; repeated int32 next_segments = 6; } ////////////////////////////////////////////////// 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; } message Segment { string namespace = 1; string topic = 2; int32 id = 3; Partition partition = 4; } message AssignSegmentBrokersRequest { Segment segment = 1; } message AssignSegmentBrokersResponse { repeated string brokers = 1; } message CheckSegmentStatusRequest { Segment segment = 1; } message CheckSegmentStatusResponse { bool is_active = 1; } message CheckBrokerLoadRequest { } message CheckBrokerLoadResponse { int64 message_count = 1; int64 bytes_count = 2; } ////////////////////////////////////////////////// message BrokerStats { int32 cpu_usage_percent = 1; map stats = 2; } message TopicPartitionStats { Topic topic = 1; Partition partition = 2; int32 consumer_count = 3; bool is_leader = 4; } message ConnectToBalancerRequest { message InitMessage { string broker = 1; } oneof message { InitMessage init = 1; BrokerStats stats = 2; } } message ConnectToBalancerResponse { } ////////////////////////////////////////////////// message CreateTopicRequest { Topic topic = 1; int32 partition_count = 2; } message CreateTopicResponse { repeated BrokerPartitionAssignment broker_partition_assignments = 2; } message DoCreateTopicRequest { Topic topic = 1; Partition partition = 2; } message DoCreateTopicResponse { } message ListTopicsRequest { } message ListTopicsResponse { repeated Topic topics = 1; } message LookupTopicBrokersRequest { Topic topic = 1; bool is_for_publish = 2; } 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 RequestTopicPartitionsRequest { Topic topic = 1; int32 partition_count = 2; } message RequestTopicPartitionsResponse { repeated BrokerPartitionAssignment broker_partition_assignments = 1; } message AssignTopicPartitionsRequest { Topic topic = 1; repeated BrokerPartitionAssignment broker_partition_assignments = 2; bool is_leader = 3; } message AssignTopicPartitionsResponse { } message CheckTopicPartitionsStatusRequest { string namespace = 1; string topic = 2; BrokerPartitionAssignment broker_partition_assignment = 3; bool should_cancel_if_not_match = 4; } message CheckTopicPartitionsStatusResponse { repeated BrokerPartitionAssignment broker_partition_assignments = 1; } ////////////////////////////////////////////////// message DataMessage { bytes key = 1; bytes value = 2; } message PublishRequest { message InitMessage { Topic topic = 1; Partition partition = 2; int32 ack_interval = 3; } oneof message { InitMessage init = 1; DataMessage data = 2; } int64 sequence = 3; } message PublishResponse { int64 ack_sequence = 1; string error = 2; string redirect_to_broker = 3; } message SubscribeRequest { message Consumer { string consumer_group = 1; string consumer_id = 2; string client_id = 3; } message Cursor { Topic topic = 1; Partition partition = 2; oneof offset { int64 start_offset = 3; int64 start_timestamp_ns = 4; } string filter = 5; } Consumer consumer = 1; Cursor cursor = 2; } message SubscribeResponse { message CtrlMessage { string error = 1; string redirect_to_broker = 2; } oneof message { CtrlMessage ctrl = 1; DataMessage data = 2; } }