pulsar_sdk 0.8.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +51 -0
- data/Gemfile +6 -0
- data/LICENSE +201 -0
- data/README.md +107 -0
- data/Rakefile +2 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/protobuf/pulsar_api.pb.rb +710 -0
- data/lib/protobuf/pulsar_api.proto +934 -0
- data/lib/protobuf/validate.rb +41 -0
- data/lib/pulsar_admin.rb +14 -0
- data/lib/pulsar_admin/api.rb +215 -0
- data/lib/pulsar_sdk.rb +55 -0
- data/lib/pulsar_sdk/client.rb +13 -0
- data/lib/pulsar_sdk/client/connection.rb +371 -0
- data/lib/pulsar_sdk/client/connection_pool.rb +79 -0
- data/lib/pulsar_sdk/client/rpc.rb +67 -0
- data/lib/pulsar_sdk/consumer.rb +13 -0
- data/lib/pulsar_sdk/consumer/base.rb +148 -0
- data/lib/pulsar_sdk/consumer/manager.rb +127 -0
- data/lib/pulsar_sdk/consumer/message_tracker.rb +86 -0
- data/lib/pulsar_sdk/options.rb +6 -0
- data/lib/pulsar_sdk/options/base.rb +10 -0
- data/lib/pulsar_sdk/options/connection.rb +51 -0
- data/lib/pulsar_sdk/options/consumer.rb +34 -0
- data/lib/pulsar_sdk/options/producer.rb +14 -0
- data/lib/pulsar_sdk/options/reader.rb +7 -0
- data/lib/pulsar_sdk/options/tls.rb +8 -0
- data/lib/pulsar_sdk/producer.rb +14 -0
- data/lib/pulsar_sdk/producer/base.rb +154 -0
- data/lib/pulsar_sdk/producer/manager.rb +67 -0
- data/lib/pulsar_sdk/producer/message.rb +47 -0
- data/lib/pulsar_sdk/producer/router.rb +100 -0
- data/lib/pulsar_sdk/protocol.rb +8 -0
- data/lib/pulsar_sdk/protocol/frame.rb +53 -0
- data/lib/pulsar_sdk/protocol/lookup.rb +55 -0
- data/lib/pulsar_sdk/protocol/message.rb +55 -0
- data/lib/pulsar_sdk/protocol/namespace.rb +22 -0
- data/lib/pulsar_sdk/protocol/partitioned.rb +54 -0
- data/lib/pulsar_sdk/protocol/reader.rb +67 -0
- data/lib/pulsar_sdk/protocol/structure.rb +93 -0
- data/lib/pulsar_sdk/protocol/topic.rb +74 -0
- data/lib/pulsar_sdk/tweaks.rb +10 -0
- data/lib/pulsar_sdk/tweaks/assign_attributes.rb +30 -0
- data/lib/pulsar_sdk/tweaks/base_command.rb +66 -0
- data/lib/pulsar_sdk/tweaks/binary_heap.rb +133 -0
- data/lib/pulsar_sdk/tweaks/clean_inspect.rb +15 -0
- data/lib/pulsar_sdk/tweaks/time_at_microsecond.rb +27 -0
- data/lib/pulsar_sdk/tweaks/timeout_queue.rb +52 -0
- data/lib/pulsar_sdk/tweaks/wait_map.rb +81 -0
- data/lib/pulsar_sdk/version.rb +3 -0
- data/pulsar_sdk.gemspec +31 -0
- metadata +151 -0
@@ -0,0 +1,934 @@
|
|
1
|
+
/**
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
* or more contributor license agreements. See the NOTICE file
|
4
|
+
* distributed with this work for additional information
|
5
|
+
* regarding copyright ownership. The ASF licenses this file
|
6
|
+
* to you under the Apache License, Version 2.0 (the
|
7
|
+
* "License"); you may not use this file except in compliance
|
8
|
+
* with the License. You may obtain a copy of the License at
|
9
|
+
*
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
*
|
12
|
+
* Unless required by applicable law or agreed to in writing,
|
13
|
+
* software distributed under the License is distributed on an
|
14
|
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
* KIND, either express or implied. See the License for the
|
16
|
+
* specific language governing permissions and limitations
|
17
|
+
* under the License.
|
18
|
+
*/
|
19
|
+
syntax = "proto2";
|
20
|
+
|
21
|
+
package pulsar.proto;
|
22
|
+
option java_package = "org.apache.pulsar.common.api.proto";
|
23
|
+
option optimize_for = LITE_RUNTIME;
|
24
|
+
|
25
|
+
message Schema {
|
26
|
+
enum Type {
|
27
|
+
None = 0;
|
28
|
+
String = 1;
|
29
|
+
Json = 2;
|
30
|
+
Protobuf = 3;
|
31
|
+
Avro = 4;
|
32
|
+
Bool = 5;
|
33
|
+
Int8 = 6;
|
34
|
+
Int16 = 7;
|
35
|
+
Int32 = 8;
|
36
|
+
Int64 = 9;
|
37
|
+
Float = 10;
|
38
|
+
Double = 11;
|
39
|
+
Date = 12;
|
40
|
+
Time = 13;
|
41
|
+
Timestamp = 14;
|
42
|
+
KeyValue = 15;
|
43
|
+
}
|
44
|
+
|
45
|
+
required string name = 1;
|
46
|
+
required bytes schema_data = 3;
|
47
|
+
required Type type = 4;
|
48
|
+
repeated KeyValue properties = 5;
|
49
|
+
|
50
|
+
}
|
51
|
+
|
52
|
+
message MessageIdData {
|
53
|
+
required uint64 ledgerId = 1;
|
54
|
+
required uint64 entryId = 2;
|
55
|
+
optional int32 partition = 3 [default = -1];
|
56
|
+
optional int32 batch_index = 4 [default = -1];
|
57
|
+
}
|
58
|
+
|
59
|
+
message KeyValue {
|
60
|
+
required string key = 1;
|
61
|
+
required string value = 2;
|
62
|
+
}
|
63
|
+
|
64
|
+
message KeyLongValue {
|
65
|
+
required string key = 1;
|
66
|
+
required uint64 value = 2;
|
67
|
+
}
|
68
|
+
|
69
|
+
message IntRange {
|
70
|
+
required int32 start = 1;
|
71
|
+
required int32 end = 2;
|
72
|
+
}
|
73
|
+
|
74
|
+
message EncryptionKeys {
|
75
|
+
required string key = 1;
|
76
|
+
required bytes value = 2;
|
77
|
+
repeated KeyValue metadata = 3;
|
78
|
+
}
|
79
|
+
|
80
|
+
enum CompressionType {
|
81
|
+
NONE = 0;
|
82
|
+
LZ4 = 1;
|
83
|
+
ZLIB = 2;
|
84
|
+
ZSTD = 3;
|
85
|
+
SNAPPY = 4;
|
86
|
+
}
|
87
|
+
|
88
|
+
message MessageMetadata {
|
89
|
+
required string producer_name = 1;
|
90
|
+
required uint64 sequence_id = 2;
|
91
|
+
required uint64 publish_time = 3;
|
92
|
+
repeated KeyValue properties = 4;
|
93
|
+
|
94
|
+
// Property set on replicated message,
|
95
|
+
// includes the source cluster name
|
96
|
+
optional string replicated_from = 5;
|
97
|
+
//key to decide partition for the msg
|
98
|
+
optional string partition_key = 6;
|
99
|
+
// Override namespace's replication
|
100
|
+
repeated string replicate_to = 7;
|
101
|
+
optional CompressionType compression = 8 [default = NONE];
|
102
|
+
optional uint32 uncompressed_size = 9 [default = 0];
|
103
|
+
// Removed below checksum field from Metadata as
|
104
|
+
// it should be part of send-command which keeps checksum of header + payload
|
105
|
+
//optional sfixed64 checksum = 10;
|
106
|
+
// differentiate single and batch message metadata
|
107
|
+
optional int32 num_messages_in_batch = 11 [default = 1];
|
108
|
+
|
109
|
+
// the timestamp that this event occurs. it is typically set by applications.
|
110
|
+
// if this field is omitted, `publish_time` can be used for the purpose of `event_time`.
|
111
|
+
optional uint64 event_time = 12 [default = 0];
|
112
|
+
// Contains encryption key name, encrypted key and metadata to describe the key
|
113
|
+
repeated EncryptionKeys encryption_keys = 13;
|
114
|
+
// Algorithm used to encrypt data key
|
115
|
+
optional string encryption_algo = 14;
|
116
|
+
// Additional parameters required by encryption
|
117
|
+
optional bytes encryption_param = 15;
|
118
|
+
optional bytes schema_version = 16;
|
119
|
+
|
120
|
+
optional bool partition_key_b64_encoded = 17 [ default = false ];
|
121
|
+
// Specific a key to overwrite the message key which used for ordering dispatch in Key_Shared mode.
|
122
|
+
optional bytes ordering_key = 18;
|
123
|
+
|
124
|
+
// Mark the message to be delivered at or after the specified timestamp
|
125
|
+
optional int64 deliver_at_time = 19;
|
126
|
+
|
127
|
+
// Identify whether a message is a "marker" message used for
|
128
|
+
// internal metadata instead of application published data.
|
129
|
+
// Markers will generally not be propagated back to clients
|
130
|
+
optional int32 marker_type = 20;
|
131
|
+
|
132
|
+
// transaction related message info
|
133
|
+
optional uint64 txnid_least_bits = 22 [default = 0];
|
134
|
+
optional uint64 txnid_most_bits = 23 [default = 0];
|
135
|
+
|
136
|
+
/// Add highest sequence id to support batch message with external sequence id
|
137
|
+
optional uint64 highest_sequence_id = 24 [default = 0];
|
138
|
+
}
|
139
|
+
|
140
|
+
message SingleMessageMetadata {
|
141
|
+
repeated KeyValue properties = 1;
|
142
|
+
optional string partition_key = 2;
|
143
|
+
required int32 payload_size = 3;
|
144
|
+
optional bool compacted_out = 4 [default = false];
|
145
|
+
|
146
|
+
// the timestamp that this event occurs. it is typically set by applications.
|
147
|
+
// if this field is omitted, `publish_time` can be used for the purpose of `event_time`.
|
148
|
+
optional uint64 event_time = 5 [default = 0];
|
149
|
+
optional bool partition_key_b64_encoded = 6 [ default = false ];
|
150
|
+
// Specific a key to overwrite the message key which used for ordering dispatch in Key_Shared mode.
|
151
|
+
optional bytes ordering_key = 7;
|
152
|
+
// Allows consumer retrieve the sequence id that the producer set.
|
153
|
+
optional uint64 sequence_id = 8;
|
154
|
+
}
|
155
|
+
|
156
|
+
enum ServerError {
|
157
|
+
UnknownError = 0;
|
158
|
+
MetadataError = 1; // Error with ZK/metadata
|
159
|
+
PersistenceError = 2; // Error writing reading from BK
|
160
|
+
AuthenticationError = 3; // Non valid authentication
|
161
|
+
AuthorizationError = 4; // Not authorized to use resource
|
162
|
+
|
163
|
+
ConsumerBusy = 5; // Unable to subscribe/unsubscribe because
|
164
|
+
// other consumers are connected
|
165
|
+
ServiceNotReady = 6; // Any error that requires client retry operation with a fresh lookup
|
166
|
+
ProducerBlockedQuotaExceededError = 7; // Unable to create producer because backlog quota exceeded
|
167
|
+
ProducerBlockedQuotaExceededException = 8; // Exception while creating producer because quota exceeded
|
168
|
+
ChecksumError = 9; // Error while verifying message checksum
|
169
|
+
UnsupportedVersionError = 10; // Error when an older client/version doesn't support a required feature
|
170
|
+
TopicNotFound = 11; // Topic not found
|
171
|
+
SubscriptionNotFound = 12; // Subscription not found
|
172
|
+
ConsumerNotFound = 13; // Consumer not found
|
173
|
+
TooManyRequests = 14; // Error with too many simultaneously request
|
174
|
+
TopicTerminatedError = 15; // The topic has been terminated
|
175
|
+
|
176
|
+
ProducerBusy = 16; // Producer with same name is already connected
|
177
|
+
InvalidTopicName = 17; // The topic name is not valid
|
178
|
+
|
179
|
+
IncompatibleSchema = 18; // Specified schema was incompatible with topic schema
|
180
|
+
ConsumerAssignError = 19; // Dispatcher assign consumer error
|
181
|
+
|
182
|
+
TransactionCoordinatorNotFound = 20; // Transaction coordinator not found error
|
183
|
+
InvalidTxnStatus = 21; // Invalid txn status error
|
184
|
+
}
|
185
|
+
|
186
|
+
enum AuthMethod {
|
187
|
+
AuthMethodNone = 0;
|
188
|
+
AuthMethodYcaV1 = 1;
|
189
|
+
AuthMethodAthens = 2;
|
190
|
+
}
|
191
|
+
|
192
|
+
// Each protocol version identify new features that are
|
193
|
+
// incrementally added to the protocol
|
194
|
+
enum ProtocolVersion {
|
195
|
+
v0 = 0; // Initial versioning
|
196
|
+
v1 = 1; // Added application keep-alive
|
197
|
+
v2 = 2; // Added RedeliverUnacknowledgedMessages Command
|
198
|
+
v3 = 3; // Added compression with LZ4 and ZLib
|
199
|
+
v4 = 4; // Added batch message support
|
200
|
+
v5 = 5; // Added disconnect client w/o closing connection
|
201
|
+
v6 = 6; // Added checksum computation for metadata + payload
|
202
|
+
v7 = 7; // Added CommandLookupTopic - Binary Lookup
|
203
|
+
v8 = 8; // Added CommandConsumerStats - Client fetches broker side consumer stats
|
204
|
+
v9 = 9; // Added end of topic notification
|
205
|
+
v10 = 10;// Added proxy to broker
|
206
|
+
v11 = 11;// C++ consumers before this version are not correctly handling the checksum field
|
207
|
+
v12 = 12;// Added get topic's last messageId from broker
|
208
|
+
// Added CommandActiveConsumerChange
|
209
|
+
// Added CommandGetTopicsOfNamespace
|
210
|
+
v13 = 13; // Schema-registry : added avro schema format for json
|
211
|
+
v14 = 14; // Add CommandAuthChallenge and CommandAuthResponse for mutual auth
|
212
|
+
// Added Key_Shared subscription
|
213
|
+
v15 = 15; // Add CommandGetOrCreateSchema and CommandGetOrCreateSchemaResponse
|
214
|
+
}
|
215
|
+
|
216
|
+
message CommandConnect {
|
217
|
+
required string client_version = 1;
|
218
|
+
optional AuthMethod auth_method = 2; // Deprecated. Use "auth_method_name" instead.
|
219
|
+
optional string auth_method_name = 5;
|
220
|
+
optional bytes auth_data = 3;
|
221
|
+
optional int32 protocol_version = 4 [default = 0];
|
222
|
+
|
223
|
+
// Client can ask to be proxyied to a specific broker
|
224
|
+
// This is only honored by a Pulsar proxy
|
225
|
+
optional string proxy_to_broker_url = 6;
|
226
|
+
|
227
|
+
// Original principal that was verified by
|
228
|
+
// a Pulsar proxy. In this case the auth info above
|
229
|
+
// will be the auth of the proxy itself
|
230
|
+
optional string original_principal = 7;
|
231
|
+
|
232
|
+
// Original auth role and auth Method that was passed
|
233
|
+
// to the proxy. In this case the auth info above
|
234
|
+
// will be the auth of the proxy itself
|
235
|
+
optional string original_auth_data = 8;
|
236
|
+
optional string original_auth_method = 9;
|
237
|
+
|
238
|
+
}
|
239
|
+
|
240
|
+
message CommandConnected {
|
241
|
+
required string server_version = 1;
|
242
|
+
optional int32 protocol_version = 2 [default = 0];
|
243
|
+
optional int32 max_message_size = 3;
|
244
|
+
}
|
245
|
+
|
246
|
+
message CommandAuthResponse {
|
247
|
+
optional string client_version = 1;
|
248
|
+
optional AuthData response = 2;
|
249
|
+
optional int32 protocol_version = 3 [default = 0];
|
250
|
+
}
|
251
|
+
|
252
|
+
message CommandAuthChallenge {
|
253
|
+
optional string server_version = 1;
|
254
|
+
optional AuthData challenge = 2;
|
255
|
+
optional int32 protocol_version = 3 [default = 0];
|
256
|
+
}
|
257
|
+
|
258
|
+
// To support mutual authentication type, such as Sasl, reuse this command to mutual auth.
|
259
|
+
message AuthData {
|
260
|
+
optional string auth_method_name = 1;
|
261
|
+
optional bytes auth_data = 2;
|
262
|
+
}
|
263
|
+
|
264
|
+
enum KeySharedMode {
|
265
|
+
AUTO_SPLIT = 0;
|
266
|
+
STICKY = 1;
|
267
|
+
}
|
268
|
+
|
269
|
+
message KeySharedMeta {
|
270
|
+
required KeySharedMode keySharedMode = 1;
|
271
|
+
repeated IntRange hashRanges = 3;
|
272
|
+
}
|
273
|
+
|
274
|
+
message CommandSubscribe {
|
275
|
+
enum SubType {
|
276
|
+
Exclusive = 0;
|
277
|
+
Shared = 1;
|
278
|
+
Failover = 2;
|
279
|
+
Key_Shared = 3;
|
280
|
+
}
|
281
|
+
required string topic = 1;
|
282
|
+
required string subscription = 2;
|
283
|
+
required SubType subType = 3;
|
284
|
+
|
285
|
+
required uint64 consumer_id = 4;
|
286
|
+
required uint64 request_id = 5;
|
287
|
+
optional string consumer_name = 6;
|
288
|
+
optional int32 priority_level = 7;
|
289
|
+
|
290
|
+
// Signal wether the subscription should be backed by a
|
291
|
+
// durable cursor or not
|
292
|
+
optional bool durable = 8 [default = true];
|
293
|
+
|
294
|
+
// If specified, the subscription will position the cursor
|
295
|
+
// markd-delete position on the particular message id and
|
296
|
+
// will send messages from that point
|
297
|
+
optional MessageIdData start_message_id = 9;
|
298
|
+
|
299
|
+
/// Add optional metadata key=value to this consumer
|
300
|
+
repeated KeyValue metadata = 10;
|
301
|
+
|
302
|
+
optional bool read_compacted = 11;
|
303
|
+
|
304
|
+
optional Schema schema = 12;
|
305
|
+
enum InitialPosition {
|
306
|
+
Latest = 0;
|
307
|
+
Earliest = 1;
|
308
|
+
}
|
309
|
+
// Signal whether the subscription will initialize on latest
|
310
|
+
// or not -- earliest
|
311
|
+
optional InitialPosition initialPosition = 13 [default = Latest];
|
312
|
+
|
313
|
+
// Mark the subscription as "replicated". Pulsar will make sure
|
314
|
+
// to periodically sync the state of replicated subscriptions
|
315
|
+
// across different clusters (when using geo-replication).
|
316
|
+
optional bool replicate_subscription_state = 14;
|
317
|
+
|
318
|
+
// If true, the subscribe operation will cause a topic to be
|
319
|
+
// created if it does not exist already (and if topic auto-creation
|
320
|
+
// is allowed by broker.
|
321
|
+
// If false, the subscribe operation will fail if the topic
|
322
|
+
// does not exist.
|
323
|
+
optional bool force_topic_creation = 15 [default = true];
|
324
|
+
|
325
|
+
// If specified, the subscription will reset cursor's position back
|
326
|
+
// to specified seconds and will send messages from that point
|
327
|
+
optional uint64 start_message_rollback_duration_sec = 16 [default = 0];
|
328
|
+
|
329
|
+
optional KeySharedMeta keySharedMeta = 17;
|
330
|
+
}
|
331
|
+
|
332
|
+
message CommandPartitionedTopicMetadata {
|
333
|
+
required string topic = 1;
|
334
|
+
required uint64 request_id = 2;
|
335
|
+
// TODO - Remove original_principal, original_auth_data, original_auth_method
|
336
|
+
// Original principal that was verified by
|
337
|
+
// a Pulsar proxy.
|
338
|
+
optional string original_principal = 3;
|
339
|
+
|
340
|
+
// Original auth role and auth Method that was passed
|
341
|
+
// to the proxy.
|
342
|
+
optional string original_auth_data = 4;
|
343
|
+
optional string original_auth_method = 5;
|
344
|
+
}
|
345
|
+
|
346
|
+
message CommandPartitionedTopicMetadataResponse {
|
347
|
+
enum LookupType {
|
348
|
+
Success = 0;
|
349
|
+
Failed = 1;
|
350
|
+
}
|
351
|
+
optional uint32 partitions = 1; // Optional in case of error
|
352
|
+
required uint64 request_id = 2;
|
353
|
+
optional LookupType response = 3;
|
354
|
+
optional ServerError error = 4;
|
355
|
+
optional string message = 5;
|
356
|
+
}
|
357
|
+
|
358
|
+
message CommandLookupTopic {
|
359
|
+
required string topic = 1;
|
360
|
+
required uint64 request_id = 2;
|
361
|
+
optional bool authoritative = 3 [default = false];
|
362
|
+
|
363
|
+
// TODO - Remove original_principal, original_auth_data, original_auth_method
|
364
|
+
// Original principal that was verified by
|
365
|
+
// a Pulsar proxy.
|
366
|
+
optional string original_principal = 4;
|
367
|
+
|
368
|
+
// Original auth role and auth Method that was passed
|
369
|
+
// to the proxy.
|
370
|
+
optional string original_auth_data = 5;
|
371
|
+
optional string original_auth_method = 6;
|
372
|
+
}
|
373
|
+
|
374
|
+
message CommandLookupTopicResponse {
|
375
|
+
enum LookupType {
|
376
|
+
Redirect = 0;
|
377
|
+
Connect = 1;
|
378
|
+
Failed = 2;
|
379
|
+
}
|
380
|
+
|
381
|
+
optional string brokerServiceUrl = 1; // Optional in case of error
|
382
|
+
optional string brokerServiceUrlTls = 2;
|
383
|
+
optional LookupType response = 3;
|
384
|
+
required uint64 request_id = 4;
|
385
|
+
optional bool authoritative = 5 [default = false];
|
386
|
+
optional ServerError error = 6;
|
387
|
+
optional string message = 7;
|
388
|
+
|
389
|
+
// If it's true, indicates to the client that it must
|
390
|
+
// always connect through the service url after the
|
391
|
+
// lookup has been completed.
|
392
|
+
optional bool proxy_through_service_url = 8 [default = false];
|
393
|
+
}
|
394
|
+
|
395
|
+
/// Create a new Producer on a topic, assigning the given producer_id,
|
396
|
+
/// all messages sent with this producer_id will be persisted on the topic
|
397
|
+
message CommandProducer {
|
398
|
+
required string topic = 1;
|
399
|
+
required uint64 producer_id = 2;
|
400
|
+
required uint64 request_id = 3;
|
401
|
+
|
402
|
+
/// If a producer name is specified, the name will be used,
|
403
|
+
/// otherwise the broker will generate a unique name
|
404
|
+
optional string producer_name = 4;
|
405
|
+
|
406
|
+
optional bool encrypted = 5 [default = false];
|
407
|
+
|
408
|
+
/// Add optional metadata key=value to this producer
|
409
|
+
repeated KeyValue metadata = 6;
|
410
|
+
|
411
|
+
optional Schema schema = 7;
|
412
|
+
|
413
|
+
// If producer reconnect to broker, the epoch of this producer will +1
|
414
|
+
optional uint64 epoch = 8 [default = 0];
|
415
|
+
|
416
|
+
// Indicate the name of the producer is generated or user provided
|
417
|
+
// Use default true here is in order to be forward compatible with the client
|
418
|
+
optional bool user_provided_producer_name = 9 [default = true];
|
419
|
+
}
|
420
|
+
|
421
|
+
message CommandSend {
|
422
|
+
required uint64 producer_id = 1;
|
423
|
+
required uint64 sequence_id = 2;
|
424
|
+
optional int32 num_messages = 3 [default = 1];
|
425
|
+
optional uint64 txnid_least_bits = 4 [default = 0];
|
426
|
+
optional uint64 txnid_most_bits = 5 [default = 0];
|
427
|
+
|
428
|
+
/// Add highest sequence id to support batch message with external sequence id
|
429
|
+
optional uint64 highest_sequence_id = 6 [default = 0];
|
430
|
+
}
|
431
|
+
|
432
|
+
message CommandSendReceipt {
|
433
|
+
required uint64 producer_id = 1;
|
434
|
+
required uint64 sequence_id = 2;
|
435
|
+
optional MessageIdData message_id = 3;
|
436
|
+
optional uint64 highest_sequence_id = 4 [default = 0];
|
437
|
+
}
|
438
|
+
|
439
|
+
message CommandSendError {
|
440
|
+
required uint64 producer_id = 1;
|
441
|
+
required uint64 sequence_id = 2;
|
442
|
+
required ServerError error = 3;
|
443
|
+
required string message = 4;
|
444
|
+
}
|
445
|
+
|
446
|
+
message CommandMessage {
|
447
|
+
required uint64 consumer_id = 1;
|
448
|
+
required MessageIdData message_id = 2;
|
449
|
+
optional uint32 redelivery_count = 3 [default = 0];
|
450
|
+
}
|
451
|
+
|
452
|
+
message CommandAck {
|
453
|
+
enum AckType {
|
454
|
+
Individual = 0;
|
455
|
+
Cumulative = 1;
|
456
|
+
}
|
457
|
+
|
458
|
+
required uint64 consumer_id = 1;
|
459
|
+
required AckType ack_type = 2;
|
460
|
+
|
461
|
+
// In case of individual acks, the client can pass a list of message ids
|
462
|
+
repeated MessageIdData message_id = 3;
|
463
|
+
|
464
|
+
// Acks can contain a flag to indicate the consumer
|
465
|
+
// received an invalid message that got discarded
|
466
|
+
// before being passed on to the application.
|
467
|
+
enum ValidationError {
|
468
|
+
UncompressedSizeCorruption = 0;
|
469
|
+
DecompressionError = 1;
|
470
|
+
ChecksumMismatch = 2;
|
471
|
+
BatchDeSerializeError = 3;
|
472
|
+
DecryptionError = 4;
|
473
|
+
}
|
474
|
+
|
475
|
+
optional ValidationError validation_error = 4;
|
476
|
+
repeated KeyLongValue properties = 5;
|
477
|
+
|
478
|
+
optional uint64 txnid_least_bits = 6 [default = 0];
|
479
|
+
optional uint64 txnid_most_bits = 7 [default = 0];
|
480
|
+
}
|
481
|
+
|
482
|
+
message CommandAckResponse {
|
483
|
+
required uint64 consumer_id = 1;
|
484
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
485
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
486
|
+
optional ServerError error = 4;
|
487
|
+
optional string message = 5;
|
488
|
+
}
|
489
|
+
|
490
|
+
// changes on active consumer
|
491
|
+
message CommandActiveConsumerChange {
|
492
|
+
required uint64 consumer_id = 1;
|
493
|
+
optional bool is_active = 2 [default = false];
|
494
|
+
}
|
495
|
+
|
496
|
+
message CommandFlow {
|
497
|
+
required uint64 consumer_id = 1;
|
498
|
+
|
499
|
+
// Max number of messages to prefetch, in addition
|
500
|
+
// of any number previously specified
|
501
|
+
required uint32 messagePermits = 2;
|
502
|
+
}
|
503
|
+
|
504
|
+
message CommandUnsubscribe {
|
505
|
+
required uint64 consumer_id = 1;
|
506
|
+
required uint64 request_id = 2;
|
507
|
+
}
|
508
|
+
|
509
|
+
// Reset an existing consumer to a particular message id
|
510
|
+
message CommandSeek {
|
511
|
+
required uint64 consumer_id = 1;
|
512
|
+
required uint64 request_id = 2;
|
513
|
+
|
514
|
+
optional MessageIdData message_id = 3;
|
515
|
+
optional uint64 message_publish_time = 4;
|
516
|
+
}
|
517
|
+
|
518
|
+
// Message sent by broker to client when a topic
|
519
|
+
// has been forcefully terminated and there are no more
|
520
|
+
// messages left to consume
|
521
|
+
message CommandReachedEndOfTopic {
|
522
|
+
required uint64 consumer_id = 1;
|
523
|
+
}
|
524
|
+
|
525
|
+
message CommandCloseProducer {
|
526
|
+
required uint64 producer_id = 1;
|
527
|
+
required uint64 request_id = 2;
|
528
|
+
}
|
529
|
+
|
530
|
+
message CommandCloseConsumer {
|
531
|
+
required uint64 consumer_id = 1;
|
532
|
+
required uint64 request_id = 2;
|
533
|
+
}
|
534
|
+
|
535
|
+
message CommandRedeliverUnacknowledgedMessages {
|
536
|
+
required uint64 consumer_id = 1;
|
537
|
+
repeated MessageIdData message_ids = 2;
|
538
|
+
}
|
539
|
+
|
540
|
+
message CommandSuccess {
|
541
|
+
required uint64 request_id = 1;
|
542
|
+
optional Schema schema = 2;
|
543
|
+
}
|
544
|
+
|
545
|
+
/// Response from CommandProducer
|
546
|
+
message CommandProducerSuccess {
|
547
|
+
required uint64 request_id = 1;
|
548
|
+
required string producer_name = 2;
|
549
|
+
|
550
|
+
// The last sequence id that was stored by this producer in the previous session
|
551
|
+
// This will only be meaningful if deduplication has been enabled.
|
552
|
+
optional int64 last_sequence_id = 3 [default = -1];
|
553
|
+
optional bytes schema_version = 4;
|
554
|
+
}
|
555
|
+
|
556
|
+
message CommandError {
|
557
|
+
required uint64 request_id = 1;
|
558
|
+
required ServerError error = 2;
|
559
|
+
required string message = 3;
|
560
|
+
}
|
561
|
+
|
562
|
+
// Commands to probe the state of connection.
|
563
|
+
// When either client or broker doesn't receive commands for certain
|
564
|
+
// amount of time, they will send a Ping probe.
|
565
|
+
message CommandPing {
|
566
|
+
}
|
567
|
+
message CommandPong {
|
568
|
+
}
|
569
|
+
|
570
|
+
message CommandConsumerStats {
|
571
|
+
required uint64 request_id = 1;
|
572
|
+
// required string topic_name = 2;
|
573
|
+
// required string subscription_name = 3;
|
574
|
+
required uint64 consumer_id = 4;
|
575
|
+
}
|
576
|
+
|
577
|
+
message CommandConsumerStatsResponse {
|
578
|
+
required uint64 request_id = 1;
|
579
|
+
optional ServerError error_code = 2;
|
580
|
+
optional string error_message = 3;
|
581
|
+
|
582
|
+
/// Total rate of messages delivered to the consumer. msg/s
|
583
|
+
optional double msgRateOut = 4;
|
584
|
+
|
585
|
+
/// Total throughput delivered to the consumer. bytes/s
|
586
|
+
optional double msgThroughputOut = 5;
|
587
|
+
|
588
|
+
/// Total rate of messages redelivered by this consumer. msg/s
|
589
|
+
optional double msgRateRedeliver = 6;
|
590
|
+
|
591
|
+
/// Name of the consumer
|
592
|
+
optional string consumerName = 7;
|
593
|
+
|
594
|
+
/// Number of available message permits for the consumer
|
595
|
+
optional uint64 availablePermits = 8;
|
596
|
+
|
597
|
+
/// Number of unacknowledged messages for the consumer
|
598
|
+
optional uint64 unackedMessages = 9;
|
599
|
+
|
600
|
+
/// Flag to verify if consumer is blocked due to reaching threshold of unacked messages
|
601
|
+
optional bool blockedConsumerOnUnackedMsgs = 10;
|
602
|
+
|
603
|
+
/// Address of this consumer
|
604
|
+
optional string address = 11;
|
605
|
+
|
606
|
+
/// Timestamp of connection
|
607
|
+
optional string connectedSince = 12;
|
608
|
+
|
609
|
+
/// Whether this subscription is Exclusive or Shared or Failover
|
610
|
+
optional string type = 13;
|
611
|
+
|
612
|
+
/// Total rate of messages expired on this subscription. msg/s
|
613
|
+
optional double msgRateExpired = 14;
|
614
|
+
|
615
|
+
/// Number of messages in the subscription backlog
|
616
|
+
optional uint64 msgBacklog = 15;
|
617
|
+
}
|
618
|
+
|
619
|
+
message CommandGetLastMessageId {
|
620
|
+
required uint64 consumer_id = 1;
|
621
|
+
required uint64 request_id = 2;
|
622
|
+
}
|
623
|
+
|
624
|
+
message CommandGetLastMessageIdResponse {
|
625
|
+
required MessageIdData last_message_id = 1;
|
626
|
+
required uint64 request_id = 2;
|
627
|
+
}
|
628
|
+
|
629
|
+
message CommandGetTopicsOfNamespace {
|
630
|
+
enum Mode {
|
631
|
+
PERSISTENT = 0;
|
632
|
+
NON_PERSISTENT = 1;
|
633
|
+
ALL = 2;
|
634
|
+
}
|
635
|
+
required uint64 request_id = 1;
|
636
|
+
required string namespace = 2;
|
637
|
+
optional Mode mode = 3 [default = PERSISTENT];
|
638
|
+
}
|
639
|
+
|
640
|
+
message CommandGetTopicsOfNamespaceResponse {
|
641
|
+
required uint64 request_id = 1;
|
642
|
+
repeated string topics = 2;
|
643
|
+
}
|
644
|
+
|
645
|
+
message CommandGetSchema {
|
646
|
+
required uint64 request_id = 1;
|
647
|
+
required string topic = 2;
|
648
|
+
|
649
|
+
optional bytes schema_version = 3;
|
650
|
+
}
|
651
|
+
|
652
|
+
message CommandGetSchemaResponse {
|
653
|
+
required uint64 request_id = 1;
|
654
|
+
optional ServerError error_code = 2;
|
655
|
+
optional string error_message = 3;
|
656
|
+
|
657
|
+
optional Schema schema = 4;
|
658
|
+
optional bytes schema_version = 5;
|
659
|
+
}
|
660
|
+
|
661
|
+
message CommandGetOrCreateSchema {
|
662
|
+
required uint64 request_id = 1;
|
663
|
+
required string topic = 2;
|
664
|
+
required Schema schema = 3;
|
665
|
+
}
|
666
|
+
|
667
|
+
message CommandGetOrCreateSchemaResponse {
|
668
|
+
required uint64 request_id = 1;
|
669
|
+
optional ServerError error_code = 2;
|
670
|
+
optional string error_message = 3;
|
671
|
+
|
672
|
+
optional bytes schema_version = 4;
|
673
|
+
}
|
674
|
+
|
675
|
+
/// --- transaction related ---
|
676
|
+
|
677
|
+
enum TxnAction {
|
678
|
+
COMMIT = 0;
|
679
|
+
ABORT = 1;
|
680
|
+
}
|
681
|
+
|
682
|
+
message CommandNewTxn {
|
683
|
+
required uint64 request_id = 1;
|
684
|
+
optional uint64 txn_ttl_seconds = 2 [default = 0];
|
685
|
+
optional uint64 tc_id = 3 [default = 0];
|
686
|
+
}
|
687
|
+
|
688
|
+
message CommandNewTxnResponse {
|
689
|
+
required uint64 request_id = 1;
|
690
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
691
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
692
|
+
optional ServerError error = 4;
|
693
|
+
optional string message = 5;
|
694
|
+
}
|
695
|
+
|
696
|
+
message CommandAddPartitionToTxn {
|
697
|
+
required uint64 request_id = 1;
|
698
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
699
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
700
|
+
repeated string partitions = 4;
|
701
|
+
}
|
702
|
+
|
703
|
+
message CommandAddPartitionToTxnResponse {
|
704
|
+
required uint64 request_id = 1;
|
705
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
706
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
707
|
+
optional ServerError error = 4;
|
708
|
+
optional string message = 5;
|
709
|
+
}
|
710
|
+
|
711
|
+
message Subscription {
|
712
|
+
required string topic = 1;
|
713
|
+
required string subscription = 2;
|
714
|
+
}
|
715
|
+
message CommandAddSubscriptionToTxn {
|
716
|
+
required uint64 request_id = 1;
|
717
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
718
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
719
|
+
repeated Subscription subscription = 4;
|
720
|
+
}
|
721
|
+
|
722
|
+
message CommandAddSubscriptionToTxnResponse {
|
723
|
+
required uint64 request_id = 1;
|
724
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
725
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
726
|
+
optional ServerError error = 4;
|
727
|
+
optional string message = 5;
|
728
|
+
}
|
729
|
+
|
730
|
+
message CommandEndTxn {
|
731
|
+
required uint64 request_id = 1;
|
732
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
733
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
734
|
+
optional TxnAction txn_action = 4;
|
735
|
+
}
|
736
|
+
|
737
|
+
message CommandEndTxnResponse {
|
738
|
+
required uint64 request_id = 1;
|
739
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
740
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
741
|
+
optional ServerError error = 4;
|
742
|
+
optional string message = 5;
|
743
|
+
}
|
744
|
+
|
745
|
+
message CommandEndTxnOnPartition {
|
746
|
+
required uint64 request_id = 1;
|
747
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
748
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
749
|
+
optional string topic = 4;
|
750
|
+
optional TxnAction txn_action = 5;
|
751
|
+
}
|
752
|
+
|
753
|
+
message CommandEndTxnOnPartitionResponse {
|
754
|
+
required uint64 request_id = 1;
|
755
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
756
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
757
|
+
optional ServerError error = 4;
|
758
|
+
optional string message = 5;
|
759
|
+
}
|
760
|
+
|
761
|
+
message CommandEndTxnOnSubscription {
|
762
|
+
required uint64 request_id = 1;
|
763
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
764
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
765
|
+
optional Subscription subscription= 4;
|
766
|
+
optional TxnAction txn_action = 5;
|
767
|
+
}
|
768
|
+
|
769
|
+
message CommandEndTxnOnSubscriptionResponse {
|
770
|
+
required uint64 request_id = 1;
|
771
|
+
optional uint64 txnid_least_bits = 2 [default = 0];
|
772
|
+
optional uint64 txnid_most_bits = 3 [default = 0];
|
773
|
+
optional ServerError error = 4;
|
774
|
+
optional string message = 5;
|
775
|
+
}
|
776
|
+
|
777
|
+
message BaseCommand {
|
778
|
+
enum Type {
|
779
|
+
CONNECT = 2;
|
780
|
+
CONNECTED = 3;
|
781
|
+
SUBSCRIBE = 4;
|
782
|
+
|
783
|
+
PRODUCER = 5;
|
784
|
+
|
785
|
+
SEND = 6;
|
786
|
+
SEND_RECEIPT= 7;
|
787
|
+
SEND_ERROR = 8;
|
788
|
+
|
789
|
+
MESSAGE = 9;
|
790
|
+
ACK = 10;
|
791
|
+
FLOW = 11;
|
792
|
+
|
793
|
+
UNSUBSCRIBE = 12;
|
794
|
+
|
795
|
+
SUCCESS = 13;
|
796
|
+
ERROR = 14;
|
797
|
+
|
798
|
+
CLOSE_PRODUCER = 15;
|
799
|
+
CLOSE_CONSUMER = 16;
|
800
|
+
|
801
|
+
PRODUCER_SUCCESS = 17;
|
802
|
+
|
803
|
+
PING = 18;
|
804
|
+
PONG = 19;
|
805
|
+
|
806
|
+
REDELIVER_UNACKNOWLEDGED_MESSAGES = 20;
|
807
|
+
|
808
|
+
PARTITIONED_METADATA = 21;
|
809
|
+
PARTITIONED_METADATA_RESPONSE = 22;
|
810
|
+
|
811
|
+
LOOKUP = 23;
|
812
|
+
LOOKUP_RESPONSE = 24;
|
813
|
+
|
814
|
+
CONSUMER_STATS = 25;
|
815
|
+
CONSUMER_STATS_RESPONSE = 26;
|
816
|
+
|
817
|
+
REACHED_END_OF_TOPIC = 27;
|
818
|
+
|
819
|
+
SEEK = 28;
|
820
|
+
|
821
|
+
GET_LAST_MESSAGE_ID = 29;
|
822
|
+
GET_LAST_MESSAGE_ID_RESPONSE = 30;
|
823
|
+
|
824
|
+
ACTIVE_CONSUMER_CHANGE = 31;
|
825
|
+
|
826
|
+
|
827
|
+
GET_TOPICS_OF_NAMESPACE = 32;
|
828
|
+
GET_TOPICS_OF_NAMESPACE_RESPONSE = 33;
|
829
|
+
|
830
|
+
GET_SCHEMA = 34;
|
831
|
+
GET_SCHEMA_RESPONSE = 35;
|
832
|
+
|
833
|
+
AUTH_CHALLENGE = 36;
|
834
|
+
AUTH_RESPONSE = 37;
|
835
|
+
|
836
|
+
ACK_RESPONSE = 38;
|
837
|
+
|
838
|
+
GET_OR_CREATE_SCHEMA = 39;
|
839
|
+
GET_OR_CREATE_SCHEMA_RESPONSE = 40;
|
840
|
+
|
841
|
+
// transaction related
|
842
|
+
NEW_TXN = 50;
|
843
|
+
NEW_TXN_RESPONSE = 51;
|
844
|
+
|
845
|
+
ADD_PARTITION_TO_TXN = 52;
|
846
|
+
ADD_PARTITION_TO_TXN_RESPONSE = 53;
|
847
|
+
|
848
|
+
ADD_SUBSCRIPTION_TO_TXN = 54;
|
849
|
+
ADD_SUBSCRIPTION_TO_TXN_RESPONSE = 55;
|
850
|
+
|
851
|
+
END_TXN = 56;
|
852
|
+
END_TXN_RESPONSE = 57;
|
853
|
+
|
854
|
+
END_TXN_ON_PARTITION = 58;
|
855
|
+
END_TXN_ON_PARTITION_RESPONSE = 59;
|
856
|
+
|
857
|
+
END_TXN_ON_SUBSCRIPTION = 60;
|
858
|
+
END_TXN_ON_SUBSCRIPTION_RESPONSE = 61;
|
859
|
+
|
860
|
+
}
|
861
|
+
|
862
|
+
|
863
|
+
required Type type = 1;
|
864
|
+
|
865
|
+
optional CommandConnect connect = 2;
|
866
|
+
optional CommandConnected connected = 3;
|
867
|
+
|
868
|
+
optional CommandSubscribe subscribe = 4;
|
869
|
+
optional CommandProducer producer = 5;
|
870
|
+
optional CommandSend send = 6;
|
871
|
+
optional CommandSendReceipt send_receipt = 7;
|
872
|
+
optional CommandSendError send_error = 8;
|
873
|
+
optional CommandMessage message = 9;
|
874
|
+
optional CommandAck ack = 10;
|
875
|
+
optional CommandFlow flow = 11;
|
876
|
+
optional CommandUnsubscribe unsubscribe = 12;
|
877
|
+
|
878
|
+
optional CommandSuccess success = 13;
|
879
|
+
optional CommandError error = 14;
|
880
|
+
|
881
|
+
optional CommandCloseProducer close_producer = 15;
|
882
|
+
optional CommandCloseConsumer close_consumer = 16;
|
883
|
+
|
884
|
+
optional CommandProducerSuccess producer_success = 17;
|
885
|
+
optional CommandPing ping = 18;
|
886
|
+
optional CommandPong pong = 19;
|
887
|
+
optional CommandRedeliverUnacknowledgedMessages redeliverUnacknowledgedMessages = 20;
|
888
|
+
|
889
|
+
optional CommandPartitionedTopicMetadata partitionMetadata = 21;
|
890
|
+
optional CommandPartitionedTopicMetadataResponse partitionMetadataResponse = 22;
|
891
|
+
|
892
|
+
optional CommandLookupTopic lookupTopic = 23;
|
893
|
+
optional CommandLookupTopicResponse lookupTopicResponse = 24;
|
894
|
+
|
895
|
+
optional CommandConsumerStats consumerStats = 25;
|
896
|
+
optional CommandConsumerStatsResponse consumerStatsResponse = 26;
|
897
|
+
|
898
|
+
optional CommandReachedEndOfTopic reachedEndOfTopic = 27;
|
899
|
+
|
900
|
+
optional CommandSeek seek = 28;
|
901
|
+
|
902
|
+
optional CommandGetLastMessageId getLastMessageId = 29;
|
903
|
+
optional CommandGetLastMessageIdResponse getLastMessageIdResponse = 30;
|
904
|
+
|
905
|
+
optional CommandActiveConsumerChange active_consumer_change = 31;
|
906
|
+
|
907
|
+
optional CommandGetTopicsOfNamespace getTopicsOfNamespace = 32;
|
908
|
+
optional CommandGetTopicsOfNamespaceResponse getTopicsOfNamespaceResponse = 33;
|
909
|
+
|
910
|
+
optional CommandGetSchema getSchema = 34;
|
911
|
+
optional CommandGetSchemaResponse getSchemaResponse = 35;
|
912
|
+
|
913
|
+
optional CommandAuthChallenge authChallenge = 36;
|
914
|
+
optional CommandAuthResponse authResponse = 37;
|
915
|
+
|
916
|
+
optional CommandAckResponse ackResponse = 38;
|
917
|
+
|
918
|
+
optional CommandGetOrCreateSchema getOrCreateSchema = 39;
|
919
|
+
optional CommandGetOrCreateSchemaResponse getOrCreateSchemaResponse = 40;
|
920
|
+
|
921
|
+
// transaction related
|
922
|
+
optional CommandNewTxn newTxn = 50;
|
923
|
+
optional CommandNewTxnResponse newTxnResponse = 51;
|
924
|
+
optional CommandAddPartitionToTxn addPartitionToTxn= 52;
|
925
|
+
optional CommandAddPartitionToTxnResponse addPartitionToTxnResponse = 53;
|
926
|
+
optional CommandAddSubscriptionToTxn addSubscriptionToTxn = 54;
|
927
|
+
optional CommandAddSubscriptionToTxnResponse addSubscriptionToTxnResponse = 55;
|
928
|
+
optional CommandEndTxn endTxn = 56;
|
929
|
+
optional CommandEndTxnResponse endTxnResponse = 57;
|
930
|
+
optional CommandEndTxnOnPartition endTxnOnPartition = 58;
|
931
|
+
optional CommandEndTxnOnPartitionResponse endTxnOnPartitionResponse = 59;
|
932
|
+
optional CommandEndTxnOnSubscription endTxnOnSubscription = 60;
|
933
|
+
optional CommandEndTxnOnSubscriptionResponse endTxnOnSubscriptionResponse = 61;
|
934
|
+
}
|