From 6843b45617263a76d804b8fb14d94cb2a0eb1bcb Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Tue, 9 Sep 2025 14:59:31 +0200 Subject: [PATCH] feat(wip): support latest versions of kafka protocol --- .tool-versions | 3 + Makefile | 2 +- priv/api-keys.eterm | 30 + priv/kafka.bnf | 13527 +++++++++++----- priv/kafka_protocol_bnf/KafkaProtocolBnf.java | 6 +- priv/kafka_protocol_bnf/build.gradle | 6 +- priv/kpro_gen.escript | 4 +- priv/process_api_keys.py | 16 + scripts/setup-test-env.sh | 4 +- src/kpro_brokers.erl | 37 +- src/kpro_lib.erl | 9 + src/kpro_req_lib.erl | 124 +- src/kpro_schema.erl | 3728 ++++- test/kpro_fetch_tests.erl | 44 +- ...pro_produce_req_encode_benchmark_tests.erl | 2 +- test/kpro_test_lib.erl | 26 +- 16 files changed, 12723 insertions(+), 4845 deletions(-) create mode 100644 .tool-versions create mode 100644 priv/process_api_keys.py diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..87bdf07 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,3 @@ +scala 3.7.2 +gradle 9.0.0 +erlang 27.2-3 diff --git a/Makefile b/Makefile index 5d7b8b5..b85f836 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ GEN_CODE = src/kpro_schema.erl .PHONY: kafka-bnf kafka-bnf: @cd priv/kafka_protocol_bnf && gradle run - @cat priv/kafka.bnf | grep "#.*ApiKey" | awk '{print "{"$$2" "$$3"}."}' | sed -r 's/([A-Z])/_\L\1/g' | sed 's/{_/{/' | sort -hk2 > priv/api-keys.eterm + @python3 priv/process_api_keys.py $(GEN_CODE): $(GEN_INPUT) @priv/kpro_gen.escript diff --git a/priv/api-keys.eterm b/priv/api-keys.eterm index 1182b26..60c004b 100644 --- a/priv/api-keys.eterm +++ b/priv/api-keys.eterm @@ -41,3 +41,33 @@ {alter_partition_reassignments, 45}. {list_partition_reassignments, 46}. {offset_delete, 47}. +{describe_client_quotas, 48}. +{alter_client_quotas, 49}. +{describe_user_scram_credentials, 50}. +{alter_user_scram_credentials, 51}. +{fetch_snapshot, 59}. +{describe_cluster, 60}. +{describe_producers, 61}. +{unregister_broker, 64}. +{describe_transactions, 65}. +{list_transactions, 66}. +{consumer_group_heartbeat, 68}. +{consumer_group_describe, 69}. +{controller_registration, 70}. +{get_telemetry_subscriptions, 71}. +{push_telemetry, 72}. +{assign_replicas_to_dirs, 73}. +{list_config_resources, 74}. +{describe_topic_partitions, 75}. +{share_group_heartbeat, 76}. +{share_group_describe, 77}. +{share_fetch, 78}. +{share_acknowledge, 79}. +{add_raft_voter, 80}. +{remove_raft_voter, 81}. +{update_raft_voter, 82}. +{streams_group_heartbeat, 88}. +{streams_group_describe, 89}. +{describe_share_group_offsets, 90}. +{alter_share_group_offsets, 91}. +{delete_share_group_offsets, 92}. diff --git a/priv/kafka.bnf b/priv/kafka.bnf index 7c5601c..a1b289d 100644 --- a/priv/kafka.bnf +++ b/priv/kafka.bnf @@ -1,297 +1,361 @@ # generated code, do not edit! #ApiKey: Produce, 0 -ProduceRequestV0 => acks timeout [topic_data] +ProduceRequestV3 => transactional_id acks timeout_ms [topic_data] + transactional_id => NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name [partition_data] + name => STRING + partition_data => index records + index => INT32 + records => RECORDS +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. -ProduceRequestV1 => acks timeout [topic_data] +ProduceRequestV4 => transactional_id acks timeout_ms [topic_data] + transactional_id => NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name [partition_data] + name => STRING + partition_data => index records + index => INT32 + records => RECORDS +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. -ProduceRequestV2 => acks timeout [topic_data] +ProduceRequestV5 => transactional_id acks timeout_ms [topic_data] + transactional_id => NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name [partition_data] + name => STRING + partition_data => index records + index => INT32 + records => RECORDS +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. -ProduceRequestV3 => transactional_id acks timeout [topic_data] +ProduceRequestV6 => transactional_id acks timeout_ms [topic_data] transactional_id => NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name [partition_data] + name => STRING + partition_data => index records + index => INT32 + records => RECORDS -# transactional_id: The transactional id or null if the producer is not transactional +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. -ProduceRequestV4 => transactional_id acks timeout [topic_data] +ProduceRequestV7 => transactional_id acks timeout_ms [topic_data] transactional_id => NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name [partition_data] + name => STRING + partition_data => index records + index => INT32 + records => RECORDS -# transactional_id: The transactional id or null if the producer is not transactional +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. -ProduceRequestV5 => transactional_id acks timeout [topic_data] +ProduceRequestV8 => transactional_id acks timeout_ms [topic_data] transactional_id => NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name [partition_data] + name => STRING + partition_data => index records + index => INT32 + records => RECORDS -# transactional_id: The transactional id or null if the producer is not transactional +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. -ProduceRequestV6 => transactional_id acks timeout [topic_data] - transactional_id => NULLABLE_STRING +ProduceRequestV9 => transactional_id acks timeout_ms {topic_data} TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name {partition_data} TAG_BUFFER + name => COMPACT_STRING + partition_data => index records TAG_BUFFER + index => INT32 + records => COMPACT_RECORDS -# transactional_id: The transactional id or null if the producer is not transactional +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ProduceRequestV7 => transactional_id acks timeout [topic_data] - transactional_id => NULLABLE_STRING +ProduceRequestV10 => transactional_id acks timeout_ms {topic_data} TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name {partition_data} TAG_BUFFER + name => COMPACT_STRING + partition_data => index records TAG_BUFFER + index => INT32 + records => COMPACT_RECORDS -# transactional_id: The transactional id or null if the producer is not transactional +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ProduceRequestV8 => transactional_id acks timeout [topic_data] - transactional_id => NULLABLE_STRING +ProduceRequestV11 => transactional_id acks timeout_ms {topic_data} TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING acks => INT16 - timeout => INT32 - topic_data => topic [data] - topic => STRING - data => partition record_set - partition => INT32 - record_set => RECORDS + timeout_ms => INT32 + topic_data => name {partition_data} TAG_BUFFER + name => COMPACT_STRING + partition_data => index records TAG_BUFFER + index => INT32 + records => COMPACT_RECORDS -# transactional_id: The transactional id or null if the producer is not transactional +# transactional_id: The transactional ID, or null if the producer is not transactional. # acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. -# timeout: The time to await a response in ms. -# topic: Name of topic -# partition: Topic partition id +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ProduceResponseV0 => [responses] - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset - partition => INT32 - error_code => INT16 - base_offset => INT64 +ProduceRequestV12 => transactional_id acks timeout_ms {topic_data} TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + acks => INT16 + timeout_ms => INT32 + topic_data => name {partition_data} TAG_BUFFER + name => COMPACT_STRING + partition_data => index records TAG_BUFFER + index => INT32 + records => COMPACT_RECORDS -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code +# transactional_id: The transactional ID, or null if the producer is not transactional. +# acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# name: The topic name. +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +ProduceRequestV13 => transactional_id acks timeout_ms {topic_data} TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + acks => INT16 + timeout_ms => INT32 + topic_data => topic_id {partition_data} TAG_BUFFER + topic_id => UUID + partition_data => index records TAG_BUFFER + index => INT32 + records => COMPACT_RECORDS + +# transactional_id: The transactional ID, or null if the producer is not transactional. +# acks: The number of acknowledgments the producer requires the leader to have received before considering a request complete. Allowed values: 0 for no acknowledgments, 1 for only the leader and -1 for the full ISR. +# timeout_ms: The timeout to await a response in milliseconds. +# topic_data: Each topic to produce to. +# topic_id: The unique topic ID +# partition_data: Each partition to produce to. +# index: The partition index. +# records: The record data to be produced. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ProduceResponseV1 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset - partition => INT32 - error_code => INT16 - base_offset => INT64 - throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -ProduceResponseV2 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time - partition => INT32 - error_code => INT16 - base_offset => INT64 - log_append_time => INT64 - throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) ProduceResponseV3 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time - partition => INT32 + responses => name [partition_responses] + name => STRING + partition_responses => index error_code base_offset log_append_time_ms + index => INT32 error_code => INT16 base_offset => INT64 - log_append_time => INT64 + log_append_time_ms => INT64 throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. ProduceResponseV4 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time - partition => INT32 + responses => name [partition_responses] + name => STRING + partition_responses => index error_code base_offset log_append_time_ms + index => INT32 error_code => INT16 base_offset => INT64 - log_append_time => INT64 + log_append_time_ms => INT64 throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. ProduceResponseV5 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time log_start_offset - partition => INT32 + responses => name [partition_responses] + name => STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset + index => INT32 error_code => INT16 base_offset => INT64 - log_append_time => INT64 + log_append_time_ms => INT64 log_start_offset => INT64 throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# log_start_offset: The start offset of the log at the time this produce response was created -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. ProduceResponseV6 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time log_start_offset - partition => INT32 + responses => name [partition_responses] + name => STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset + index => INT32 error_code => INT16 base_offset => INT64 - log_append_time => INT64 + log_append_time_ms => INT64 log_start_offset => INT64 throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# log_start_offset: The start offset of the log at the time this produce response was created -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. ProduceResponseV7 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time log_start_offset - partition => INT32 + responses => name [partition_responses] + name => STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset + index => INT32 error_code => INT16 base_offset => INT64 - log_append_time => INT64 + log_append_time_ms => INT64 log_start_offset => INT64 throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# log_start_offset: The start offset of the log at the time this produce response was created -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. ProduceResponseV8 => [responses] throttle_time_ms - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code base_offset log_append_time log_start_offset [record_errors] error_message - partition => INT32 + responses => name [partition_responses] + name => STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset [record_errors] error_message + index => INT32 error_code => INT16 base_offset => INT64 - log_append_time => INT64 + log_append_time_ms => INT64 log_start_offset => INT64 record_errors => batch_index batch_index_error_message batch_index => INT32 @@ -299,112 +363,195 @@ ProduceResponseV8 => [responses] throttle_time_ms error_message => NULLABLE_STRING throttle_time_ms => INT32 -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# log_append_time: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. -# log_start_offset: The start offset of the log at the time this produce response was created -# record_errors: The batch indices of records that caused the batch to be dropped -# batch_index: The batch index of the record that caused the batch to be dropped -# batch_index_error_message: The error message of the record that caused the batch to be dropped -# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# record_errors: The batch indices of records that caused the batch to be dropped. +# batch_index: The batch index of the record that caused the batch to be dropped. +# batch_index_error_message: The error message of the record that caused the batch to be dropped. +# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -#ApiKey: Fetch, 1 -FetchRequestV0 => replica_id max_wait_time min_bytes [topics] - replica_id => INT32 - max_wait_time => INT32 - min_bytes => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition fetch_offset partition_max_bytes - partition => INT32 - fetch_offset => INT64 - partition_max_bytes => INT32 +ProduceResponseV9 => {responses} throttle_time_ms TAG_BUFFER + responses => name {partition_responses} TAG_BUFFER + name => COMPACT_STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset {record_errors} error_message TAG_BUFFER + index => INT32 + error_code => INT16 + base_offset => INT64 + log_append_time_ms => INT64 + log_start_offset => INT64 + record_errors => batch_index batch_index_error_message TAG_BUFFER + batch_index => INT32 + batch_index_error_message => COMPACT_NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + throttle_time_ms => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# partition_max_bytes: Maximum bytes to fetch. +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# record_errors: The batch indices of records that caused the batch to be dropped. +# batch_index: The batch index of the record that caused the batch to be dropped. +# batch_index_error_message: The error message of the record that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -FetchRequestV1 => replica_id max_wait_time min_bytes [topics] - replica_id => INT32 - max_wait_time => INT32 - min_bytes => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition fetch_offset partition_max_bytes - partition => INT32 - fetch_offset => INT64 - partition_max_bytes => INT32 +ProduceResponseV10 => {responses} throttle_time_ms TAG_BUFFER + responses => name {partition_responses} TAG_BUFFER + name => COMPACT_STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset {record_errors} error_message TAG_BUFFER + index => INT32 + error_code => INT16 + base_offset => INT64 + log_append_time_ms => INT64 + log_start_offset => INT64 + record_errors => batch_index batch_index_error_message TAG_BUFFER + batch_index => INT32 + batch_index_error_message => COMPACT_NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + throttle_time_ms => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# partition_max_bytes: Maximum bytes to fetch. +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# record_errors: The batch indices of records that caused the batch to be dropped. +# batch_index: The batch index of the record that caused the batch to be dropped. +# batch_index_error_message: The error message of the record that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -FetchRequestV2 => replica_id max_wait_time min_bytes [topics] - replica_id => INT32 - max_wait_time => INT32 - min_bytes => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition fetch_offset partition_max_bytes - partition => INT32 - fetch_offset => INT64 - partition_max_bytes => INT32 +ProduceResponseV11 => {responses} throttle_time_ms TAG_BUFFER + responses => name {partition_responses} TAG_BUFFER + name => COMPACT_STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset {record_errors} error_message TAG_BUFFER + index => INT32 + error_code => INT16 + base_offset => INT64 + log_append_time_ms => INT64 + log_start_offset => INT64 + record_errors => batch_index batch_index_error_message TAG_BUFFER + batch_index => INT32 + batch_index_error_message => COMPACT_NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + throttle_time_ms => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# partition_max_bytes: Maximum bytes to fetch. +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# record_errors: The batch indices of records that caused the batch to be dropped. +# batch_index: The batch index of the record that caused the batch to be dropped. +# batch_index_error_message: The error message of the record that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -FetchRequestV3 => replica_id max_wait_time min_bytes max_bytes [topics] - replica_id => INT32 - max_wait_time => INT32 - min_bytes => INT32 - max_bytes => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition fetch_offset partition_max_bytes - partition => INT32 - fetch_offset => INT64 - partition_max_bytes => INT32 +ProduceResponseV12 => {responses} throttle_time_ms TAG_BUFFER + responses => name {partition_responses} TAG_BUFFER + name => COMPACT_STRING + partition_responses => index error_code base_offset log_append_time_ms log_start_offset {record_errors} error_message TAG_BUFFER + index => INT32 + error_code => INT16 + base_offset => INT64 + log_append_time_ms => INT64 + log_start_offset => INT64 + record_errors => batch_index batch_index_error_message TAG_BUFFER + batch_index => INT32 + batch_index_error_message => COMPACT_NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + throttle_time_ms => INT32 + +# responses: Each produce response. +# name: The topic name. +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# record_errors: The batch indices of records that caused the batch to be dropped. +# batch_index: The batch index of the record that caused the batch to be dropped. +# batch_index_error_message: The error message of the record that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields + -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# partition_max_bytes: Maximum bytes to fetch. +ProduceResponseV13 => {responses} throttle_time_ms TAG_BUFFER + responses => topic_id {partition_responses} TAG_BUFFER + topic_id => UUID + partition_responses => index error_code base_offset log_append_time_ms log_start_offset {record_errors} error_message TAG_BUFFER + index => INT32 + error_code => INT16 + base_offset => INT64 + log_append_time_ms => INT64 + log_start_offset => INT64 + record_errors => batch_index batch_index_error_message TAG_BUFFER + batch_index => INT32 + batch_index_error_message => COMPACT_NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + throttle_time_ms => INT32 + +# responses: Each produce response. +# topic_id: The unique topic ID +# partition_responses: Each partition that we produced to within the topic. +# index: The partition index. +# error_code: The error code, or 0 if there was no error. +# base_offset: The base offset. +# log_append_time_ms: The timestamp returned by broker after appending the messages. If CreateTime is used for the topic, the timestamp will be -1. If LogAppendTime is used for the topic, the timestamp will be the broker local time when the messages are appended. +# log_start_offset: The log start offset. +# record_errors: The batch indices of records that caused the batch to be dropped. +# batch_index: The batch index of the record that caused the batch to be dropped. +# batch_index_error_message: The error message of the record that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# error_message: The global error message summarizing the common root cause of the records that caused the batch to be dropped. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -FetchRequestV4 => replica_id max_wait_time min_bytes max_bytes isolation_level [topics] +#ApiKey: Fetch, 1 +FetchRequestV4 => replica_id max_wait_ms min_bytes max_bytes isolation_level [topics] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -415,22 +562,22 @@ FetchRequestV4 => replica_id max_wait_time min_bytes max_bytes isolation_level [ fetch_offset => INT64 partition_max_bytes => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# partition_max_bytes: Maximum bytes to fetch. +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# fetch_offset: The message offset. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. -FetchRequestV5 => replica_id max_wait_time min_bytes max_bytes isolation_level [topics] +FetchRequestV5 => replica_id max_wait_ms min_bytes max_bytes isolation_level [topics] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -442,23 +589,23 @@ FetchRequestV5 => replica_id max_wait_time min_bytes max_bytes isolation_level [ log_start_offset => INT64 partition_max_bytes => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. - - -FetchRequestV6 => replica_id max_wait_time min_bytes max_bytes isolation_level [topics] +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. + + +FetchRequestV6 => replica_id max_wait_ms min_bytes max_bytes isolation_level [topics] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -470,23 +617,23 @@ FetchRequestV6 => replica_id max_wait_time min_bytes max_bytes isolation_level [ log_start_offset => INT64 partition_max_bytes => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. - - -FetchRequestV7 => replica_id max_wait_time min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. + + +FetchRequestV7 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -503,28 +650,28 @@ FetchRequestV7 => replica_id max_wait_time min_bytes max_bytes isolation_level s topic => STRING partitions => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# session_id: The fetch session ID -# session_epoch: The fetch session epoch -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. -# forgotten_topics_data: Topics to remove from the fetch session. -# topic: Name of topic -# partitions: Partitions to remove from the fetch session. - - -FetchRequestV8 => replica_id max_wait_time min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic: The topic name. +# partitions: The partitions indexes to forget. + + +FetchRequestV8 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -541,28 +688,28 @@ FetchRequestV8 => replica_id max_wait_time min_bytes max_bytes isolation_level s topic => STRING partitions => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# session_id: The fetch session ID -# session_epoch: The fetch session epoch -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. -# forgotten_topics_data: Topics to remove from the fetch session. -# topic: Name of topic -# partitions: Partitions to remove from the fetch session. - - -FetchRequestV9 => replica_id max_wait_time min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic: The topic name. +# partitions: The partitions indexes to forget. + + +FetchRequestV9 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -580,29 +727,29 @@ FetchRequestV9 => replica_id max_wait_time min_bytes max_bytes isolation_level s topic => STRING partitions => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# session_id: The fetch session ID -# session_epoch: The fetch session epoch -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. -# forgotten_topics_data: Topics to remove from the fetch session. -# topic: Name of topic -# partitions: Partitions to remove from the fetch session. - - -FetchRequestV10 => replica_id max_wait_time min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic: The topic name. +# partitions: The partitions indexes to forget. + + +FetchRequestV10 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -620,29 +767,29 @@ FetchRequestV10 => replica_id max_wait_time min_bytes max_bytes isolation_level topic => STRING partitions => INT32 -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# session_id: The fetch session ID -# session_epoch: The fetch session epoch -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. -# forgotten_topics_data: Topics to remove from the fetch session. -# topic: Name of topic -# partitions: Partitions to remove from the fetch session. - - -FetchRequestV11 => replica_id max_wait_time min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] rack_id +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic: The topic name. +# partitions: The partitions indexes to forget. + + +FetchRequestV11 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch [topics] [forgotten_topics_data] rack_id replica_id => INT32 - max_wait_time => INT32 + max_wait_ms => INT32 min_bytes => INT32 max_bytes => INT32 isolation_level => INT8 @@ -661,3701 +808,8100 @@ FetchRequestV11 => replica_id max_wait_time min_bytes max_bytes isolation_level partitions => INT32 rack_id => STRING -# replica_id: Broker id of the follower. For normal consumers, use -1. -# max_wait_time: Maximum time in ms to wait for the response. -# min_bytes: Minimum bytes to accumulate in the response. -# max_bytes: Maximum bytes to accumulate in the response. Note that this is not an absolute maximum, if the first message in the first non-empty partition of the fetch is larger than this value, the message will still be returned to ensure that progress can be made. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# session_id: The fetch session ID -# session_epoch: The fetch session epoch -# topics: Topics to fetch in the order provided. -# topic: Name of topic -# partitions: Partitions to fetch. -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# fetch_offset: Message offset. -# log_start_offset: Earliest available offset of the follower replica. The field is only used when request is sent by follower. -# partition_max_bytes: Maximum bytes to fetch. -# forgotten_topics_data: Topics to remove from the fetch session. -# topic: Name of topic -# partitions: Partitions to remove from the fetch session. -# rack_id: The consumer's rack id - - -FetchResponseV0 => [responses] - responses => topic [partition_responses] - topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark - partition => INT32 - error_code => INT16 - high_watermark => INT64 - record_set => RECORDS - -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. - - -FetchResponseV1 => throttle_time_ms [responses] - throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark - partition => INT32 - error_code => INT16 - high_watermark => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. - - -FetchResponseV2 => throttle_time_ms [responses] - throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark - partition => INT32 - error_code => INT16 - high_watermark => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic: The topic name. +# partitions: The partitions indexes to forget. +# rack_id: Rack ID of the consumer making this request. + + +FetchRequestV12 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + replica_id => INT32 + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => INT32 + rack_id => COMPACT_STRING + +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic: The topic name. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + +FetchRequestV13 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + replica_id => INT32 + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 + rack_id => COMPACT_STRING + +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + +FetchRequestV14 => replica_id max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + replica_id => INT32 + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 + rack_id => COMPACT_STRING + +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + +FetchRequestV15 => max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 + rack_id => COMPACT_STRING + +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + +FetchRequestV16 => max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 + rack_id => COMPACT_STRING + +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + +FetchRequestV17 => max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 + rack_id => COMPACT_STRING + +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + +FetchRequestV18 => max_wait_ms min_bytes max_bytes isolation_level session_id session_epoch {topics} {forgotten_topics_data} rack_id TAG_BUFFER + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + isolation_level => INT8 + session_id => INT32 + session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition current_leader_epoch fetch_offset last_fetched_epoch log_start_offset partition_max_bytes TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + fetch_offset => INT64 + last_fetched_epoch => INT32 + log_start_offset => INT64 + partition_max_bytes => INT32 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 + rack_id => COMPACT_STRING + +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# session_id: The fetch session ID. +# session_epoch: The fetch session epoch, which is used for ordering requests in a session. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition. +# fetch_offset: The message offset. +# last_fetched_epoch: The epoch of the last fetched record or -1 if there is none. +# log_start_offset: The earliest available offset of the follower replica. The field is only used when the request is sent by the follower. +# partition_max_bytes: The maximum bytes to fetch from this partition. See KIP-74 for cases where this limit may not be honored. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: In an incremental fetch request, the partitions to remove. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# rack_id: Rack ID of the consumer making this request. +# _tagged_fields: The tagged fields + + + + + -FetchResponseV3 => throttle_time_ms [responses] - throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark - partition => INT32 - error_code => INT16 - high_watermark => INT64 - record_set => RECORDS -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. FetchResponseV4 => throttle_time_ms [responses] throttle_time_ms => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV5 => throttle_time_ms [responses] throttle_time_ms => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV6 => throttle_time_ms [responses] throttle_time_ms => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV7 => throttle_time_ms error_code session_id [responses] throttle_time_ms => INT32 error_code => INT16 session_id => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# session_id: The fetch session ID -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV8 => throttle_time_ms error_code session_id [responses] throttle_time_ms => INT32 error_code => INT16 session_id => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# session_id: The fetch session ID -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV9 => throttle_time_ms error_code session_id [responses] throttle_time_ms => INT32 error_code => INT16 session_id => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# session_id: The fetch session ID -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV10 => throttle_time_ms error_code session_id [responses] throttle_time_ms => INT32 error_code => INT16 session_id => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# session_id: The fetch session ID -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + records => RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# records: The record data. FetchResponseV11 => throttle_time_ms error_code session_id [responses] throttle_time_ms => INT32 error_code => INT16 session_id => INT32 - responses => topic [partition_responses] + responses => topic [partitions] topic => STRING - partition_responses => partition_header record_set - partition_header => partition error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] preferred_read_replica - partition => INT32 - error_code => INT16 - high_watermark => INT64 - last_stable_offset => INT64 - log_start_offset => INT64 - aborted_transactions => producer_id first_offset - producer_id => INT64 - first_offset => INT64 - preferred_read_replica => INT32 - record_set => RECORDS - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# session_id: The fetch session ID -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code -# high_watermark: Last committed offset. -# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED) -# log_start_offset: Earliest available offset. -# producer_id: The producer id associated with the aborted transactions -# first_offset: The first offset in the aborted transaction -# preferred_read_replica: The ID of the replica that the consumer should prefer. - + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset [aborted_transactions] preferred_read_replica records + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => RECORDS -#ApiKey: ListOffsets, 2 -ListOffsetsRequestV0 => replica_id [topics] - replica_id => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition timestamp max_num_offsets - partition => INT32 - timestamp => INT64 - max_num_offsets => INT32 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. -# replica_id: Broker id of the follower. For normal consumers, use -1. -# topics: Topics to list offsets. -# topic: Name of topic -# partitions: Partitions to list offsets. -# partition: Topic partition id -# timestamp: The target timestamp for the partition. -# max_num_offsets: Maximum offsets to return. +FetchResponseV12 => throttle_time_ms error_code session_id {responses} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + session_id => INT32 + responses => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -ListOffsetsRequestV1 => replica_id [topics] - replica_id => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition timestamp - partition => INT32 - timestamp => INT64 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic: The topic name. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -# replica_id: Broker id of the follower. For normal consumers, use -1. -# topics: Topics to list offsets. -# topic: Name of topic -# partitions: Partitions to list offsets. -# partition: Topic partition id -# timestamp: The target timestamp for the partition. +FetchResponseV13 => throttle_time_ms error_code session_id {responses} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + session_id => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -ListOffsetsRequestV2 => replica_id isolation_level [topics] - replica_id => INT32 - isolation_level => INT8 - topics => topic [partitions] - topic => STRING - partitions => partition timestamp - partition => INT32 - timestamp => INT64 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -# replica_id: Broker id of the follower. For normal consumers, use -1. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to list offsets. -# topic: Name of topic -# partitions: Partitions to list offsets. -# partition: Topic partition id -# timestamp: The target timestamp for the partition. +FetchResponseV14 => throttle_time_ms error_code session_id {responses} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + session_id => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 + error_code => INT16 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -ListOffsetsRequestV3 => replica_id isolation_level [topics] - replica_id => INT32 - isolation_level => INT8 - topics => topic [partitions] - topic => STRING - partitions => partition timestamp - partition => INT32 - timestamp => INT64 - -# replica_id: Broker id of the follower. For normal consumers, use -1. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to list offsets. -# topic: Name of topic -# partitions: Partitions to list offsets. -# partition: Topic partition id -# timestamp: The target timestamp for the partition. - - -ListOffsetsRequestV4 => replica_id isolation_level [topics] - replica_id => INT32 - isolation_level => INT8 - topics => topic [partitions] - topic => STRING - partitions => partition current_leader_epoch timestamp - partition => INT32 - current_leader_epoch => INT32 - timestamp => INT64 - -# replica_id: Broker id of the follower. For normal consumers, use -1. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to list offsets. -# topic: Name of topic -# partitions: Partitions to list offsets. -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# timestamp: The target timestamp for the partition. - - -ListOffsetsRequestV5 => replica_id isolation_level [topics] - replica_id => INT32 - isolation_level => INT8 - topics => topic [partitions] - topic => STRING - partitions => partition current_leader_epoch timestamp - partition => INT32 - current_leader_epoch => INT32 - timestamp => INT64 - -# replica_id: Broker id of the follower. For normal consumers, use -1. -# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records -# topics: Topics to list offsets. -# topic: Name of topic -# partitions: Partitions to list offsets. -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# timestamp: The target timestamp for the partition. - - -ListOffsetsResponseV0 => [responses] - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code [offsets] - partition => INT32 - error_code => INT16 - offsets => INT64 - -# responses: The listed offsets by topic -# topic: Name of topic -# partition_responses: The listed offsets by partition -# partition: Topic partition id -# error_code: Response error code -# offsets: A list of offsets. - - -ListOffsetsResponseV1 => [responses] - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code timestamp offset - partition => INT32 - error_code => INT16 - timestamp => INT64 - offset => INT64 - -# responses: The listed offsets by topic -# topic: Name of topic -# partition_responses: The listed offsets by partition -# partition: Topic partition id -# error_code: Response error code -# timestamp: The timestamp associated with the returned offset -# offset: The offset found +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ListOffsetsResponseV2 => throttle_time_ms [responses] +FetchResponseV15 => throttle_time_ms error_code session_id {responses} TAG_BUFFER throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code timestamp offset - partition => INT32 + error_code => INT16 + session_id => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 error_code => INT16 - timestamp => INT64 - offset => INT64 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# responses: The listed offsets by topic -# topic: Name of topic -# partition_responses: The listed offsets by partition -# partition: Topic partition id -# error_code: Response error code -# timestamp: The timestamp associated with the returned offset -# offset: The offset found +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ListOffsetsResponseV3 => throttle_time_ms [responses] +FetchResponseV16 => throttle_time_ms error_code session_id {responses} TAG_BUFFER throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code timestamp offset - partition => INT32 + error_code => INT16 + session_id => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 error_code => INT16 - timestamp => INT64 - offset => INT64 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# responses: The listed offsets by topic -# topic: Name of topic -# partition_responses: The listed offsets by partition -# partition: Topic partition id -# error_code: Response error code -# timestamp: The timestamp associated with the returned offset -# offset: The offset found +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ListOffsetsResponseV4 => throttle_time_ms [responses] +FetchResponseV17 => throttle_time_ms error_code session_id {responses} TAG_BUFFER throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code timestamp offset leader_epoch - partition => INT32 + error_code => INT16 + session_id => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 error_code => INT16 - timestamp => INT64 - offset => INT64 - leader_epoch => INT32 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# responses: The listed offsets by topic -# topic: Name of topic -# partition_responses: The listed offsets by partition -# partition: Topic partition id -# error_code: Response error code -# timestamp: The timestamp associated with the returned offset -# offset: The offset found -# leader_epoch: The leader epoch +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ListOffsetsResponseV5 => throttle_time_ms [responses] +FetchResponseV18 => throttle_time_ms error_code session_id {responses} TAG_BUFFER throttle_time_ms => INT32 - responses => topic [partition_responses] - topic => STRING - partition_responses => partition error_code timestamp offset leader_epoch - partition => INT32 + error_code => INT16 + session_id => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code high_watermark last_stable_offset log_start_offset {aborted_transactions} preferred_read_replica records TAG_BUFFER + partition_index => INT32 error_code => INT16 - timestamp => INT64 - offset => INT64 - leader_epoch => INT32 + high_watermark => INT64 + last_stable_offset => INT64 + log_start_offset => INT64 + aborted_transactions => producer_id first_offset TAG_BUFFER + producer_id => INT64 + first_offset => INT64 + preferred_read_replica => INT32 + records => COMPACT_RECORDS -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# responses: The listed offsets by topic -# topic: Name of topic -# partition_responses: The listed offsets by partition -# partition: Topic partition id -# error_code: Response error code -# timestamp: The timestamp associated with the returned offset -# offset: The offset found -# leader_epoch: The leader epoch +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# session_id: The fetch session ID, or 0 if this is not part of a fetch session. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# high_watermark: The current high water mark. +# last_stable_offset: The last stable offset (or LSO) of the partition. This is the last offset such that the state of all transactional records prior to this offset have been decided (ABORTED or COMMITTED). +# log_start_offset: The current log start offset. +# aborted_transactions: The aborted transactions. +# producer_id: The producer id associated with the aborted transaction. +# first_offset: The first offset in the aborted transaction. +# _tagged_fields: The tagged fields +# preferred_read_replica: The preferred read replica for the consumer to use on its next fetch request. +# records: The record data. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: Metadata, 3 -MetadataRequestV0 => [topics] - topics => name +#ApiKey: ListOffsets, 2 +ListOffsetsRequestV1 => replica_id [topics] + replica_id => INT32 + topics => name [partitions] name => STRING + partitions => partition_index timestamp + partition_index => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# topics: Each topic in the request. # name: The topic name. +# partitions: Each partition in the request. +# partition_index: The partition index. +# timestamp: The current timestamp. -MetadataRequestV1 => [topics] - topics => name +ListOffsetsRequestV2 => replica_id isolation_level [topics] + replica_id => INT32 + isolation_level => INT8 + topics => name [partitions] name => STRING + partitions => partition_index timestamp + partition_index => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. +# partitions: Each partition in the request. +# partition_index: The partition index. +# timestamp: The current timestamp. -MetadataRequestV2 => [topics] - topics => name +ListOffsetsRequestV3 => replica_id isolation_level [topics] + replica_id => INT32 + isolation_level => INT8 + topics => name [partitions] name => STRING + partitions => partition_index timestamp + partition_index => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. +# partitions: Each partition in the request. +# partition_index: The partition index. +# timestamp: The current timestamp. -MetadataRequestV3 => [topics] - topics => name +ListOffsetsRequestV4 => replica_id isolation_level [topics] + replica_id => INT32 + isolation_level => INT8 + topics => name [partitions] name => STRING + partitions => partition_index current_leader_epoch timestamp + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. -MetadataRequestV4 => [topics] allow_auto_topic_creation - topics => name +ListOffsetsRequestV5 => replica_id isolation_level [topics] + replica_id => INT32 + isolation_level => INT8 + topics => name [partitions] name => STRING - allow_auto_topic_creation => BOOLEAN + partitions => partition_index current_leader_epoch timestamp + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. -# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. -MetadataRequestV5 => [topics] allow_auto_topic_creation - topics => name - name => STRING - allow_auto_topic_creation => BOOLEAN +ListOffsetsRequestV6 => replica_id isolation_level {topics} TAG_BUFFER + replica_id => INT32 + isolation_level => INT8 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index current_leader_epoch timestamp TAG_BUFFER + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. -# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataRequestV6 => [topics] allow_auto_topic_creation - topics => name - name => STRING - allow_auto_topic_creation => BOOLEAN +ListOffsetsRequestV7 => replica_id isolation_level {topics} TAG_BUFFER + replica_id => INT32 + isolation_level => INT8 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index current_leader_epoch timestamp TAG_BUFFER + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. -# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataRequestV7 => [topics] allow_auto_topic_creation - topics => name - name => STRING - allow_auto_topic_creation => BOOLEAN +ListOffsetsRequestV8 => replica_id isolation_level {topics} TAG_BUFFER + replica_id => INT32 + isolation_level => INT8 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index current_leader_epoch timestamp TAG_BUFFER + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. -# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataRequestV8 => [topics] allow_auto_topic_creation include_cluster_authorized_operations include_topic_authorized_operations - topics => name - name => STRING - allow_auto_topic_creation => BOOLEAN - include_cluster_authorized_operations => BOOLEAN - include_topic_authorized_operations => BOOLEAN +ListOffsetsRequestV9 => replica_id isolation_level {topics} TAG_BUFFER + replica_id => INT32 + isolation_level => INT8 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index current_leader_epoch timestamp TAG_BUFFER + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. -# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. -# include_cluster_authorized_operations: Whether to include cluster authorized operations. -# include_topic_authorized_operations: Whether to include topic authorized operations. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataRequestV9 => {topics} allow_auto_topic_creation include_cluster_authorized_operations include_topic_authorized_operations TAG_BUFFER - topics => name TAG_BUFFER +ListOffsetsRequestV10 => replica_id isolation_level {topics} timeout_ms TAG_BUFFER + replica_id => INT32 + isolation_level => INT8 + topics => name {partitions} TAG_BUFFER name => COMPACT_STRING - allow_auto_topic_creation => BOOLEAN - include_cluster_authorized_operations => BOOLEAN - include_topic_authorized_operations => BOOLEAN + partitions => partition_index current_leader_epoch timestamp TAG_BUFFER + partition_index => INT32 + current_leader_epoch => INT32 + timestamp => INT64 + timeout_ms => INT32 -# topics: The topics to fetch metadata for. +# replica_id: The broker ID of the requester, or -1 if this request is being made by a normal consumer. +# isolation_level: This setting controls the visibility of transactional records. Using READ_UNCOMMITTED (isolation_level = 0) makes all records visible. With READ_COMMITTED (isolation_level = 1), non-transactional and COMMITTED transactional records are visible. To be more concrete, READ_COMMITTED returns all data from offsets smaller than the current LSO (last stable offset), and enables the inclusion of the list of aborted transactions in the result, which allows consumers to discard ABORTED transactional records. +# topics: Each topic in the request. # name: The topic name. +# partitions: Each partition in the request. +# partition_index: The partition index. +# current_leader_epoch: The current leader epoch. +# timestamp: The current timestamp. # _tagged_fields: The tagged fields -# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. -# include_cluster_authorized_operations: Whether to include cluster authorized operations. -# include_topic_authorized_operations: Whether to include topic authorized operations. +# _tagged_fields: The tagged fields +# timeout_ms: The timeout to await a response in milliseconds for requests that require reading from remote storage for topics enabled with tiered storage. # _tagged_fields: The tagged fields -MetadataResponseV0 => [brokers] [topics] - brokers => node_id host port - node_id => INT32 - host => STRING - port => INT32 - topics => error_code name [partitions] - error_code => INT16 + + +ListOffsetsResponseV1 => [topics] + topics => name [partitions] name => STRING - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] - error_code => INT16 + partitions => partition_index error_code timestamp offset partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. -MetadataResponseV1 => [brokers] controller_id [topics] - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 +ListOffsetsResponseV2 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] - error_code => INT16 + partitions => partition_index error_code timestamp offset partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# controller_id: The ID of the controller broker. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. -MetadataResponseV2 => [brokers] cluster_id controller_id [topics] - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 +ListOffsetsResponseV3 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] - error_code => INT16 + partitions => partition_index error_code timestamp offset partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. -MetadataResponseV3 => throttle_time_ms [brokers] cluster_id controller_id [topics] +ListOffsetsResponseV4 => throttle_time_ms [topics] throttle_time_ms => INT32 - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 + topics => name [partitions] name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] - error_code => INT16 + partitions => partition_index error_code timestamp offset leader_epoch partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 + leader_epoch => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. -MetadataResponseV4 => throttle_time_ms [brokers] cluster_id controller_id [topics] +ListOffsetsResponseV5 => throttle_time_ms [topics] throttle_time_ms => INT32 - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 + topics => name [partitions] name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] - error_code => INT16 + partitions => partition_index error_code timestamp offset leader_epoch partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 + leader_epoch => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. -MetadataResponseV5 => throttle_time_ms [brokers] cluster_id controller_id [topics] +ListOffsetsResponseV6 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 - name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] [offline_replicas] - error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code timestamp offset leader_epoch TAG_BUFFER partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 - offline_replicas => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 + leader_epoch => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. -# offline_replicas: The set of offline replicas of this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataResponseV6 => throttle_time_ms [brokers] cluster_id controller_id [topics] +ListOffsetsResponseV7 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 - name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] [offline_replicas] - error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code timestamp offset leader_epoch TAG_BUFFER partition_index => INT32 - leader_id => INT32 - replica_nodes => INT32 - isr_nodes => INT32 - offline_replicas => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 + leader_epoch => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. -# offline_replicas: The set of offline replicas of this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataResponseV7 => throttle_time_ms [brokers] cluster_id controller_id [topics] +ListOffsetsResponseV8 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] - error_code => INT16 - name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id leader_epoch [replica_nodes] [isr_nodes] [offline_replicas] - error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code timestamp offset leader_epoch TAG_BUFFER partition_index => INT32 - leader_id => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 leader_epoch => INT32 - replica_nodes => INT32 - isr_nodes => INT32 - offline_replicas => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# leader_epoch: The leader epoch of this partition. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. -# offline_replicas: The set of offline replicas of this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataResponseV8 => throttle_time_ms [brokers] cluster_id controller_id [topics] cluster_authorized_operations +ListOffsetsResponseV9 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - brokers => node_id host port rack - node_id => INT32 - host => STRING - port => INT32 - rack => NULLABLE_STRING - cluster_id => NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal [partitions] topic_authorized_operations - error_code => INT16 - name => STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id leader_epoch [replica_nodes] [isr_nodes] [offline_replicas] - error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code timestamp offset leader_epoch TAG_BUFFER partition_index => INT32 - leader_id => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 leader_epoch => INT32 - replica_nodes => INT32 - isr_nodes => INT32 - offline_replicas => INT32 - topic_authorized_operations => INT32 - cluster_authorized_operations => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# leader_epoch: The leader epoch of this partition. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. -# offline_replicas: The set of offline replicas of this partition. -# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. -# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -MetadataResponseV9 => throttle_time_ms {brokers} cluster_id controller_id {topics} cluster_authorized_operations TAG_BUFFER +ListOffsetsResponseV10 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - brokers => node_id host port rack TAG_BUFFER - node_id => INT32 - host => COMPACT_STRING - port => INT32 - rack => COMPACT_NULLABLE_STRING - cluster_id => COMPACT_NULLABLE_STRING - controller_id => INT32 - topics => error_code name is_internal {partitions} topic_authorized_operations TAG_BUFFER - error_code => INT16 + topics => name {partitions} TAG_BUFFER name => COMPACT_STRING - is_internal => BOOLEAN - partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {offline_replicas} TAG_BUFFER - error_code => INT16 + partitions => partition_index error_code timestamp offset leader_epoch TAG_BUFFER partition_index => INT32 - leader_id => INT32 + error_code => INT16 + timestamp => INT64 + offset => INT64 leader_epoch => INT32 - replica_nodes => INT32 - isr_nodes => INT32 - offline_replicas => INT32 - topic_authorized_operations => INT32 - cluster_authorized_operations => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# brokers: Each broker in the response. -# node_id: The broker ID. -# host: The broker hostname. -# port: The broker port. -# rack: The rack of the broker, or null if it has not been assigned to a rack. -# _tagged_fields: The tagged fields -# cluster_id: The cluster ID that responding broker belongs to. -# controller_id: The ID of the controller broker. # topics: Each topic in the response. -# error_code: The topic error, or 0 if there was no error. # name: The topic name. -# is_internal: True if the topic is internal. -# partitions: Each partition in the topic. -# error_code: The partition error, or 0 if there was no error. +# partitions: Each partition in the response. # partition_index: The partition index. -# leader_id: The ID of the leader broker. -# leader_epoch: The leader epoch of this partition. -# replica_nodes: The set of all nodes that host this partition. -# isr_nodes: The set of nodes that are in sync with the leader for this partition. -# offline_replicas: The set of offline replicas of this partition. +# error_code: The partition error code, or 0 if there was no error. +# timestamp: The timestamp associated with the returned offset. +# offset: The returned offset. +# leader_epoch: The leader epoch associated with the returned offset. # _tagged_fields: The tagged fields -# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. # _tagged_fields: The tagged fields -# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. # _tagged_fields: The tagged fields -#ApiKey: OffsetCommit, 8 -OffsetCommitRequestV0 => group_id [topics] - group_id => STRING - topics => name [partitions] +#ApiKey: Metadata, 3 +MetadataRequestV0 => [topics] + topics => name name => STRING - partitions => partition_index committed_offset committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING -# group_id: The unique group identifier. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. -OffsetCommitRequestV1 => group_id generation_id member_id [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - topics => name [partitions] +MetadataRequestV1 => [topics] + topics => name name => STRING - partitions => partition_index committed_offset commit_timestamp committed_metadata - partition_index => INT32 - committed_offset => INT64 - commit_timestamp => INT64 - committed_metadata => NULLABLE_STRING -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# commit_timestamp: The timestamp of the commit. -# committed_metadata: Any associated metadata the client wants to keep. -OffsetCommitRequestV2 => group_id generation_id member_id retention_time_ms [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - retention_time_ms => INT64 - topics => name [partitions] +MetadataRequestV2 => [topics] + topics => name name => STRING - partitions => partition_index committed_offset committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# retention_time_ms: The time period in ms to retain the offset. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. -OffsetCommitRequestV3 => group_id generation_id member_id retention_time_ms [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - retention_time_ms => INT64 - topics => name [partitions] +MetadataRequestV3 => [topics] + topics => name name => STRING - partitions => partition_index committed_offset committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# retention_time_ms: The time period in ms to retain the offset. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. -OffsetCommitRequestV4 => group_id generation_id member_id retention_time_ms [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - retention_time_ms => INT64 - topics => name [partitions] +MetadataRequestV4 => [topics] allow_auto_topic_creation + topics => name name => STRING - partitions => partition_index committed_offset committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# retention_time_ms: The time period in ms to retain the offset. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. -OffsetCommitRequestV5 => group_id generation_id member_id [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - topics => name [partitions] +MetadataRequestV5 => [topics] allow_auto_topic_creation + topics => name name => STRING - partitions => partition_index committed_offset committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. -OffsetCommitRequestV6 => group_id generation_id member_id [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - topics => name [partitions] +MetadataRequestV6 => [topics] allow_auto_topic_creation + topics => name name => STRING - partitions => partition_index committed_offset committed_leader_epoch committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_leader_epoch => INT32 - committed_metadata => NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_leader_epoch: The leader epoch of this partition. -# committed_metadata: Any associated metadata the client wants to keep. +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. -OffsetCommitRequestV7 => group_id generation_id member_id group_instance_id [topics] - group_id => STRING - generation_id => INT32 - member_id => STRING - group_instance_id => NULLABLE_STRING - topics => name [partitions] +MetadataRequestV7 => [topics] allow_auto_topic_creation + topics => name name => STRING - partitions => partition_index committed_offset committed_leader_epoch committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_leader_epoch => INT32 - committed_metadata => NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_leader_epoch: The leader epoch of this partition. -# committed_metadata: Any associated metadata the client wants to keep. +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. -OffsetCommitRequestV8 => group_id generation_id member_id group_instance_id {topics} TAG_BUFFER - group_id => COMPACT_STRING - generation_id => INT32 - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING - topics => name {partitions} TAG_BUFFER - name => COMPACT_STRING - partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER - partition_index => INT32 - committed_offset => INT64 - committed_leader_epoch => INT32 - committed_metadata => COMPACT_NULLABLE_STRING +MetadataRequestV8 => [topics] allow_auto_topic_creation include_cluster_authorized_operations include_topic_authorized_operations + topics => name + name => STRING + allow_auto_topic_creation => BOOLEAN + include_cluster_authorized_operations => BOOLEAN + include_topic_authorized_operations => BOOLEAN -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group coordinator. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# topics: The topics to commit offsets for. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: Each partition to commit offsets for. -# partition_index: The partition index. -# committed_offset: The message offset to be committed. -# committed_leader_epoch: The leader epoch of this partition. -# committed_metadata: Any associated metadata the client wants to keep. -# _tagged_fields: The tagged fields -# _tagged_fields: The tagged fields -# _tagged_fields: The tagged fields +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# include_cluster_authorized_operations: Whether to include cluster authorized operations. +# include_topic_authorized_operations: Whether to include topic authorized operations. -OffsetCommitResponseV0 => [topics] - topics => name [partitions] - name => STRING - partitions => partition_index error_code - partition_index => INT32 - error_code => INT16 +MetadataRequestV9 => {topics} allow_auto_topic_creation include_cluster_authorized_operations include_topic_authorized_operations TAG_BUFFER + topics => name TAG_BUFFER + name => COMPACT_STRING + allow_auto_topic_creation => BOOLEAN + include_cluster_authorized_operations => BOOLEAN + include_topic_authorized_operations => BOOLEAN -# topics: The responses for each topic. +# topics: The topics to fetch metadata for. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# include_cluster_authorized_operations: Whether to include cluster authorized operations. +# include_topic_authorized_operations: Whether to include topic authorized operations. +# _tagged_fields: The tagged fields -OffsetCommitResponseV1 => [topics] - topics => name [partitions] - name => STRING - partitions => partition_index error_code - partition_index => INT32 - error_code => INT16 +MetadataRequestV10 => {topics} allow_auto_topic_creation include_cluster_authorized_operations include_topic_authorized_operations TAG_BUFFER + topics => topic_id name TAG_BUFFER + topic_id => UUID + name => COMPACT_NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN + include_cluster_authorized_operations => BOOLEAN + include_topic_authorized_operations => BOOLEAN -# topics: The responses for each topic. +# topics: The topics to fetch metadata for. +# topic_id: The topic id. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# include_cluster_authorized_operations: Whether to include cluster authorized operations. +# include_topic_authorized_operations: Whether to include topic authorized operations. +# _tagged_fields: The tagged fields -OffsetCommitResponseV2 => [topics] - topics => name [partitions] - name => STRING - partitions => partition_index error_code - partition_index => INT32 - error_code => INT16 +MetadataRequestV11 => {topics} allow_auto_topic_creation include_topic_authorized_operations TAG_BUFFER + topics => topic_id name TAG_BUFFER + topic_id => UUID + name => COMPACT_NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN + include_topic_authorized_operations => BOOLEAN -# topics: The responses for each topic. +# topics: The topics to fetch metadata for. +# topic_id: The topic id. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# include_topic_authorized_operations: Whether to include topic authorized operations. +# _tagged_fields: The tagged fields -OffsetCommitResponseV3 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => name [partitions] - name => STRING - partitions => partition_index error_code - partition_index => INT32 - error_code => INT16 +MetadataRequestV12 => {topics} allow_auto_topic_creation include_topic_authorized_operations TAG_BUFFER + topics => topic_id name TAG_BUFFER + topic_id => UUID + name => COMPACT_NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN + include_topic_authorized_operations => BOOLEAN -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. +# topics: The topics to fetch metadata for. +# topic_id: The topic id. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# include_topic_authorized_operations: Whether to include topic authorized operations. +# _tagged_fields: The tagged fields -OffsetCommitResponseV4 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => name [partitions] - name => STRING - partitions => partition_index error_code - partition_index => INT32 - error_code => INT16 +MetadataRequestV13 => {topics} allow_auto_topic_creation include_topic_authorized_operations TAG_BUFFER + topics => topic_id name TAG_BUFFER + topic_id => UUID + name => COMPACT_NULLABLE_STRING + allow_auto_topic_creation => BOOLEAN + include_topic_authorized_operations => BOOLEAN -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. +# topics: The topics to fetch metadata for. +# topic_id: The topic id. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# allow_auto_topic_creation: If this is true, the broker may auto-create topics that we requested which do not already exist, if it is configured to do so. +# include_topic_authorized_operations: Whether to include topic authorized operations. +# _tagged_fields: The tagged fields -OffsetCommitResponseV5 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => name [partitions] +MetadataResponseV0 => [brokers] [topics] + brokers => node_id host port + node_id => INT32 + host => STRING + port => INT32 + topics => error_code name [partitions] + error_code => INT16 name => STRING - partitions => partition_index error_code - partition_index => INT32 + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. -# name: The topic name. -# partitions: The responses for each partition in the topic. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. # partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. -OffsetCommitResponseV6 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => name [partitions] +MetadataResponseV1 => [brokers] controller_id [topics] + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 name => STRING - partitions => partition_index error_code - partition_index => INT32 + is_internal => BOOLEAN + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. -# name: The topic name. -# partitions: The responses for each partition in the topic. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. # partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. -OffsetCommitResponseV7 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => name [partitions] +MetadataResponseV2 => [brokers] cluster_id controller_id [topics] + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 name => STRING - partitions => partition_index error_code - partition_index => INT32 + is_internal => BOOLEAN + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. + + +MetadataResponseV3 => throttle_time_ms [brokers] cluster_id controller_id [topics] + throttle_time_ms => INT32 + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 + name => STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. + + +MetadataResponseV4 => throttle_time_ms [brokers] cluster_id controller_id [topics] + throttle_time_ms => INT32 + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 + name => STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. + + +MetadataResponseV5 => throttle_time_ms [brokers] cluster_id controller_id [topics] + throttle_time_ms => INT32 + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 + name => STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] [offline_replicas] + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. + + +MetadataResponseV6 => throttle_time_ms [brokers] cluster_id controller_id [topics] + throttle_time_ms => INT32 + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 + name => STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id [replica_nodes] [isr_nodes] [offline_replicas] + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. + + +MetadataResponseV7 => throttle_time_ms [brokers] cluster_id controller_id [topics] + throttle_time_ms => INT32 + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] + error_code => INT16 + name => STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch [replica_nodes] [isr_nodes] [offline_replicas] + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. + + +MetadataResponseV8 => throttle_time_ms [brokers] cluster_id controller_id [topics] cluster_authorized_operations + throttle_time_ms => INT32 + brokers => node_id host port rack + node_id => INT32 + host => STRING + port => INT32 + rack => NULLABLE_STRING + cluster_id => NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal [partitions] topic_authorized_operations + error_code => INT16 + name => STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch [replica_nodes] [isr_nodes] [offline_replicas] + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + cluster_authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. + + +MetadataResponseV9 => throttle_time_ms {brokers} cluster_id controller_id {topics} cluster_authorized_operations TAG_BUFFER + throttle_time_ms => INT32 + brokers => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_id => COMPACT_NULLABLE_STRING + controller_id => INT32 + topics => error_code name is_internal {partitions} topic_authorized_operations TAG_BUFFER + error_code => INT16 + name => COMPACT_STRING + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {offline_replicas} TAG_BUFFER + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + cluster_authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. +# _tagged_fields: The tagged fields +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# _tagged_fields: The tagged fields +# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. +# _tagged_fields: The tagged fields + + +MetadataResponseV10 => throttle_time_ms {brokers} cluster_id controller_id {topics} cluster_authorized_operations TAG_BUFFER + throttle_time_ms => INT32 + brokers => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_id => COMPACT_NULLABLE_STRING + controller_id => INT32 + topics => error_code name topic_id is_internal {partitions} topic_authorized_operations TAG_BUFFER + error_code => INT16 + name => COMPACT_STRING + topic_id => UUID + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {offline_replicas} TAG_BUFFER + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + cluster_authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# topic_id: The topic id. Zero for non-existing topics queried by name. This is never zero when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. +# _tagged_fields: The tagged fields +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# _tagged_fields: The tagged fields +# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. +# _tagged_fields: The tagged fields + + +MetadataResponseV11 => throttle_time_ms {brokers} cluster_id controller_id {topics} TAG_BUFFER + throttle_time_ms => INT32 + brokers => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_id => COMPACT_NULLABLE_STRING + controller_id => INT32 + topics => error_code name topic_id is_internal {partitions} topic_authorized_operations TAG_BUFFER + error_code => INT16 + name => COMPACT_STRING + topic_id => UUID + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {offline_replicas} TAG_BUFFER + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# topic_id: The topic id. Zero for non-existing topics queried by name. This is never zero when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. +# _tagged_fields: The tagged fields +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +MetadataResponseV12 => throttle_time_ms {brokers} cluster_id controller_id {topics} TAG_BUFFER + throttle_time_ms => INT32 + brokers => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_id => COMPACT_NULLABLE_STRING + controller_id => INT32 + topics => error_code name topic_id is_internal {partitions} topic_authorized_operations TAG_BUFFER + error_code => INT16 + name => COMPACT_NULLABLE_STRING + topic_id => UUID + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {offline_replicas} TAG_BUFFER + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# topic_id: The topic id. Zero for non-existing topics queried by name. This is never zero when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. +# _tagged_fields: The tagged fields +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +MetadataResponseV13 => throttle_time_ms {brokers} cluster_id controller_id {topics} error_code TAG_BUFFER + throttle_time_ms => INT32 + brokers => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_id => COMPACT_NULLABLE_STRING + controller_id => INT32 + topics => error_code name topic_id is_internal {partitions} topic_authorized_operations TAG_BUFFER + error_code => INT16 + name => COMPACT_NULLABLE_STRING + topic_id => UUID + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {offline_replicas} TAG_BUFFER + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# brokers: A list of brokers present in the cluster. +# node_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. Null for non-existing topics queried by ID. This is never null when ErrorCode is zero. One of Name and TopicId is always populated. +# topic_id: The topic id. Zero for non-existing topics queried by name. This is never zero when ErrorCode is zero. One of Name and TopicId is always populated. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# offline_replicas: The set of offline replicas of this partition. +# _tagged_fields: The tagged fields +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# _tagged_fields: The tagged fields +# error_code: The top-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields + + +#ApiKey: OffsetCommit, 8 +OffsetCommitRequestV2 => group_id generation_id_or_member_epoch member_id retention_time_ms [topics] + group_id => STRING + generation_id_or_member_epoch => INT32 + member_id => STRING + retention_time_ms => INT64 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_metadata => NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# retention_time_ms: The time period in ms to retain the offset. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_metadata: Any associated metadata the client wants to keep. + + +OffsetCommitRequestV3 => group_id generation_id_or_member_epoch member_id retention_time_ms [topics] + group_id => STRING + generation_id_or_member_epoch => INT32 + member_id => STRING + retention_time_ms => INT64 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_metadata => NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# retention_time_ms: The time period in ms to retain the offset. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_metadata: Any associated metadata the client wants to keep. + + +OffsetCommitRequestV4 => group_id generation_id_or_member_epoch member_id retention_time_ms [topics] + group_id => STRING + generation_id_or_member_epoch => INT32 + member_id => STRING + retention_time_ms => INT64 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_metadata => NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# retention_time_ms: The time period in ms to retain the offset. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_metadata: Any associated metadata the client wants to keep. + + +OffsetCommitRequestV5 => group_id generation_id_or_member_epoch member_id [topics] + group_id => STRING + generation_id_or_member_epoch => INT32 + member_id => STRING + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_metadata => NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_metadata: Any associated metadata the client wants to keep. + + +OffsetCommitRequestV6 => group_id generation_id_or_member_epoch member_id [topics] + group_id => STRING + generation_id_or_member_epoch => INT32 + member_id => STRING + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of this partition. +# committed_metadata: Any associated metadata the client wants to keep. + + +OffsetCommitRequestV7 => group_id generation_id_or_member_epoch member_id group_instance_id [topics] + group_id => STRING + generation_id_or_member_epoch => INT32 + member_id => STRING + group_instance_id => NULLABLE_STRING + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of this partition. +# committed_metadata: Any associated metadata the client wants to keep. + + +OffsetCommitRequestV8 => group_id generation_id_or_member_epoch member_id group_instance_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + generation_id_or_member_epoch => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => COMPACT_NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of this partition. +# committed_metadata: Any associated metadata the client wants to keep. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetCommitRequestV9 => group_id generation_id_or_member_epoch member_id group_instance_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + generation_id_or_member_epoch => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => COMPACT_NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: The topics to commit offsets for. +# name: The topic name. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of this partition. +# committed_metadata: Any associated metadata the client wants to keep. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetCommitRequestV10 => group_id generation_id_or_member_epoch member_id group_instance_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + generation_id_or_member_epoch => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => COMPACT_NULLABLE_STRING + +# group_id: The unique group identifier. +# generation_id_or_member_epoch: The generation of the group if using the classic group protocol or the member epoch if using the consumer protocol. +# member_id: The member ID assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: The topics to commit offsets for. +# topic_id: The topic ID. +# partitions: Each partition to commit offsets for. +# partition_index: The partition index. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of this partition. +# committed_metadata: Any associated metadata the client wants to keep. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + + + + + +OffsetCommitResponseV2 => [topics] + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 + +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. + + +OffsetCommitResponseV3 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. + + +OffsetCommitResponseV4 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. + + +OffsetCommitResponseV5 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. + + +OffsetCommitResponseV6 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. + + +OffsetCommitResponseV7 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. + + +OffsetCommitResponseV8 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetCommitResponseV9 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetCommitResponseV10 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # topics: The responses for each topic. +# topic_id: The topic ID. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: OffsetFetch, 9 +OffsetFetchRequestV1 => group_id [topics] + group_id => STRING + topics => name [partition_indexes] + name => STRING + partition_indexes => INT32 + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. + + +OffsetFetchRequestV2 => group_id [topics] + group_id => STRING + topics => name [partition_indexes] + name => STRING + partition_indexes => INT32 + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. + + +OffsetFetchRequestV3 => group_id [topics] + group_id => STRING + topics => name [partition_indexes] + name => STRING + partition_indexes => INT32 + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. + + +OffsetFetchRequestV4 => group_id [topics] + group_id => STRING + topics => name [partition_indexes] + name => STRING + partition_indexes => INT32 + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. + + +OffsetFetchRequestV5 => group_id [topics] + group_id => STRING + topics => name [partition_indexes] + name => STRING + partition_indexes => INT32 + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. + + +OffsetFetchRequestV6 => group_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + topics => name {partition_indexes} TAG_BUFFER + name => COMPACT_STRING + partition_indexes => INT32 + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetFetchRequestV7 => group_id {topics} require_stable TAG_BUFFER + group_id => COMPACT_STRING + topics => name {partition_indexes} TAG_BUFFER + name => COMPACT_STRING + partition_indexes => INT32 + require_stable => BOOLEAN + +# group_id: The group to fetch offsets for. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. +# _tagged_fields: The tagged fields +# require_stable: Whether broker should hold on returning unstable offsets but set a retriable error code for the partitions. +# _tagged_fields: The tagged fields + + +OffsetFetchRequestV8 => {groups} require_stable TAG_BUFFER + groups => group_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + topics => name {partition_indexes} TAG_BUFFER + name => COMPACT_STRING + partition_indexes => INT32 + require_stable => BOOLEAN + +# groups: Each group we would like to fetch offsets for. +# group_id: The group ID. +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# require_stable: Whether broker should hold on returning unstable offsets but set a retriable error code for the partitions. +# _tagged_fields: The tagged fields + + +OffsetFetchRequestV9 => {groups} require_stable TAG_BUFFER + groups => group_id member_id member_epoch {topics} TAG_BUFFER + group_id => COMPACT_STRING + member_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + topics => name {partition_indexes} TAG_BUFFER + name => COMPACT_STRING + partition_indexes => INT32 + require_stable => BOOLEAN + +# groups: Each group we would like to fetch offsets for. +# group_id: The group ID. +# member_id: The member id. +# member_epoch: The member epoch if using the new consumer protocol (KIP-848). +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# name: The topic name. +# partition_indexes: The partition indexes we would like to fetch offsets for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# require_stable: Whether broker should hold on returning unstable offsets but set a retriable error code for the partitions. +# _tagged_fields: The tagged fields + + +OffsetFetchRequestV10 => {groups} require_stable TAG_BUFFER + groups => group_id member_id member_epoch {topics} TAG_BUFFER + group_id => COMPACT_STRING + member_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + topics => topic_id {partition_indexes} TAG_BUFFER + topic_id => UUID + partition_indexes => INT32 + require_stable => BOOLEAN + +# groups: Each group we would like to fetch offsets for. +# group_id: The group ID. +# member_id: The member id. +# member_epoch: The member epoch if using the new consumer protocol (KIP-848). +# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. +# topic_id: The topic ID. +# partition_indexes: The partition indexes we would like to fetch offsets for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# require_stable: Whether broker should hold on returning unstable offsets but set a retriable error code for the partitions. +# _tagged_fields: The tagged fields + + + + +OffsetFetchResponseV1 => [topics] + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset metadata error_code + partition_index => INT32 + committed_offset => INT64 + metadata => NULLABLE_STRING + error_code => INT16 + +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. + + +OffsetFetchResponseV2 => [topics] error_code + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset metadata error_code + partition_index => INT32 + committed_offset => INT64 + metadata => NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. +# error_code: The top-level error code, or 0 if there was no error. + + +OffsetFetchResponseV3 => throttle_time_ms [topics] error_code + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset metadata error_code + partition_index => INT32 + committed_offset => INT64 + metadata => NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. +# error_code: The top-level error code, or 0 if there was no error. + + +OffsetFetchResponseV4 => throttle_time_ms [topics] error_code + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset metadata error_code + partition_index => INT32 + committed_offset => INT64 + metadata => NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. +# error_code: The top-level error code, or 0 if there was no error. + + +OffsetFetchResponseV5 => throttle_time_ms [topics] error_code + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_leader_epoch metadata error_code + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + metadata => NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# committed_leader_epoch: The leader epoch. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. +# error_code: The top-level error code, or 0 if there was no error. + + +OffsetFetchResponseV6 => throttle_time_ms {topics} error_code TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch metadata error_code TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + metadata => COMPACT_NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# committed_leader_epoch: The leader epoch. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# error_code: The top-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields + + +OffsetFetchResponseV7 => throttle_time_ms {topics} error_code TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch metadata error_code TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + metadata => COMPACT_NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# committed_leader_epoch: The leader epoch. +# metadata: The partition metadata. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# error_code: The top-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields + + +OffsetFetchResponseV8 => throttle_time_ms {groups} TAG_BUFFER + throttle_time_ms => INT32 + groups => group_id {topics} error_code TAG_BUFFER + group_id => COMPACT_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch metadata error_code TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + metadata => COMPACT_NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: The responses per group id. +# group_id: The group ID. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# committed_leader_epoch: The leader epoch. +# metadata: The partition metadata. +# error_code: The partition-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# error_code: The group-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetFetchResponseV9 => throttle_time_ms {groups} TAG_BUFFER + throttle_time_ms => INT32 + groups => group_id {topics} error_code TAG_BUFFER + group_id => COMPACT_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch metadata error_code TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + metadata => COMPACT_NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: The responses per group id. +# group_id: The group ID. +# topics: The responses per topic. +# name: The topic name. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# committed_leader_epoch: The leader epoch. +# metadata: The partition metadata. +# error_code: The partition-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# error_code: The group-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +OffsetFetchResponseV10 => throttle_time_ms {groups} TAG_BUFFER + throttle_time_ms => INT32 + groups => group_id {topics} error_code TAG_BUFFER + group_id => COMPACT_STRING + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index committed_offset committed_leader_epoch metadata error_code TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + metadata => COMPACT_NULLABLE_STRING + error_code => INT16 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: The responses per group id. +# group_id: The group ID. +# topics: The responses per topic. +# topic_id: The topic ID. +# partitions: The responses per partition. +# partition_index: The partition index. +# committed_offset: The committed message offset. +# committed_leader_epoch: The leader epoch. +# metadata: The partition metadata. +# error_code: The partition-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# error_code: The group-level error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: FindCoordinator, 10 +FindCoordinatorRequestV0 => key + key => STRING + +# key: The coordinator key. + + +FindCoordinatorRequestV1 => key key_type + key => STRING + key_type => INT8 + +# key: The coordinator key. +# key_type: The coordinator key type. (group, transaction, share). + + +FindCoordinatorRequestV2 => key key_type + key => STRING + key_type => INT8 + +# key: The coordinator key. +# key_type: The coordinator key type. (group, transaction, share). + + +FindCoordinatorRequestV3 => key key_type TAG_BUFFER + key => COMPACT_STRING + key_type => INT8 + +# key: The coordinator key. +# key_type: The coordinator key type. (group, transaction, share). +# _tagged_fields: The tagged fields + + +FindCoordinatorRequestV4 => key_type {coordinator_keys} TAG_BUFFER + key_type => INT8 + coordinator_keys => COMPACT_STRING + +# key_type: The coordinator key type. (group, transaction, share). +# coordinator_keys: The coordinator keys. +# _tagged_fields: The tagged fields + + +FindCoordinatorRequestV5 => key_type {coordinator_keys} TAG_BUFFER + key_type => INT8 + coordinator_keys => COMPACT_STRING + +# key_type: The coordinator key type. (group, transaction, share). +# coordinator_keys: The coordinator keys. +# _tagged_fields: The tagged fields + + +FindCoordinatorRequestV6 => key_type {coordinator_keys} TAG_BUFFER + key_type => INT8 + coordinator_keys => COMPACT_STRING + +# key_type: The coordinator key type. (group, transaction, share). +# coordinator_keys: The coordinator keys. +# _tagged_fields: The tagged fields + + +FindCoordinatorResponseV0 => error_code node_id host port + error_code => INT16 + node_id => INT32 + host => STRING + port => INT32 + +# error_code: The error code, or 0 if there was no error. +# node_id: The node id. +# host: The host name. +# port: The port. + + +FindCoordinatorResponseV1 => throttle_time_ms error_code error_message node_id host port + throttle_time_ms => INT32 + error_code => INT16 + error_message => NULLABLE_STRING + node_id => INT32 + host => STRING + port => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# node_id: The node id. +# host: The host name. +# port: The port. + + +FindCoordinatorResponseV2 => throttle_time_ms error_code error_message node_id host port + throttle_time_ms => INT32 + error_code => INT16 + error_message => NULLABLE_STRING + node_id => INT32 + host => STRING + port => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# node_id: The node id. +# host: The host name. +# port: The port. + + +FindCoordinatorResponseV3 => throttle_time_ms error_code error_message node_id host port TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + node_id => INT32 + host => COMPACT_STRING + port => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# node_id: The node id. +# host: The host name. +# port: The port. +# _tagged_fields: The tagged fields + + +FindCoordinatorResponseV4 => throttle_time_ms {coordinators} TAG_BUFFER + throttle_time_ms => INT32 + coordinators => key node_id host port error_code error_message TAG_BUFFER + key => COMPACT_STRING + node_id => INT32 + host => COMPACT_STRING + port => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# coordinators: Each coordinator result in the response. +# key: The coordinator key. +# node_id: The node id. +# host: The host name. +# port: The port. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +FindCoordinatorResponseV5 => throttle_time_ms {coordinators} TAG_BUFFER + throttle_time_ms => INT32 + coordinators => key node_id host port error_code error_message TAG_BUFFER + key => COMPACT_STRING + node_id => INT32 + host => COMPACT_STRING + port => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# coordinators: Each coordinator result in the response. +# key: The coordinator key. +# node_id: The node id. +# host: The host name. +# port: The port. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +FindCoordinatorResponseV6 => throttle_time_ms {coordinators} TAG_BUFFER + throttle_time_ms => INT32 + coordinators => key node_id host port error_code error_message TAG_BUFFER + key => COMPACT_STRING + node_id => INT32 + host => COMPACT_STRING + port => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# coordinators: Each coordinator result in the response. +# key: The coordinator key. +# node_id: The node id. +# host: The host name. +# port: The port. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: JoinGroup, 11 +JoinGroupRequestV0 => group_id session_timeout_ms member_id protocol_type [protocols] + group_id => STRING + session_timeout_ms => INT32 + member_id => STRING + protocol_type => STRING + protocols => name metadata + name => STRING + metadata => BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# member_id: The member id assigned by the group coordinator. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. + + +JoinGroupRequestV1 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] + group_id => STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => STRING + protocol_type => STRING + protocols => name metadata + name => STRING + metadata => BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. + + +JoinGroupRequestV2 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] + group_id => STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => STRING + protocol_type => STRING + protocols => name metadata + name => STRING + metadata => BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. + + +JoinGroupRequestV3 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] + group_id => STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => STRING + protocol_type => STRING + protocols => name metadata + name => STRING + metadata => BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. + + +JoinGroupRequestV4 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] + group_id => STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => STRING + protocol_type => STRING + protocols => name metadata + name => STRING + metadata => BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. + + +JoinGroupRequestV5 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type [protocols] + group_id => STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => STRING + group_instance_id => NULLABLE_STRING + protocol_type => STRING + protocols => name metadata + name => STRING + metadata => BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. + + +JoinGroupRequestV6 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type {protocols} TAG_BUFFER + group_id => COMPACT_STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + protocol_type => COMPACT_STRING + protocols => name metadata TAG_BUFFER + name => COMPACT_STRING + metadata => COMPACT_BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +JoinGroupRequestV7 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type {protocols} TAG_BUFFER + group_id => COMPACT_STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + protocol_type => COMPACT_STRING + protocols => name metadata TAG_BUFFER + name => COMPACT_STRING + metadata => COMPACT_BYTES + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +JoinGroupRequestV8 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type {protocols} reason TAG_BUFFER + group_id => COMPACT_STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + protocol_type => COMPACT_STRING + protocols => name metadata TAG_BUFFER + name => COMPACT_STRING + metadata => COMPACT_BYTES + reason => COMPACT_NULLABLE_STRING + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. +# _tagged_fields: The tagged fields +# reason: The reason why the member (re-)joins the group. +# _tagged_fields: The tagged fields + + +JoinGroupRequestV9 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type {protocols} reason TAG_BUFFER + group_id => COMPACT_STRING + session_timeout_ms => INT32 + rebalance_timeout_ms => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + protocol_type => COMPACT_STRING + protocols => name metadata TAG_BUFFER + name => COMPACT_STRING + metadata => COMPACT_BYTES + reason => COMPACT_NULLABLE_STRING + +# group_id: The group identifier. +# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. +# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. +# member_id: The member id assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# protocol_type: The unique name the for class of protocols implemented by the group we want to join. +# protocols: The list of protocols that the member supports. +# name: The protocol name. +# metadata: The protocol metadata. +# _tagged_fields: The tagged fields +# reason: The reason why the member (re-)joins the group. +# _tagged_fields: The tagged fields + + +JoinGroupResponseV0 => error_code generation_id protocol_name leader member_id [members] + error_code => INT16 + generation_id => INT32 + protocol_name => STRING + leader => STRING + member_id => STRING + members => member_id metadata + member_id => STRING + metadata => BYTES + +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# metadata: The group member metadata. + + +JoinGroupResponseV1 => error_code generation_id protocol_name leader member_id [members] + error_code => INT16 + generation_id => INT32 + protocol_name => STRING + leader => STRING + member_id => STRING + members => member_id metadata + member_id => STRING + metadata => BYTES + +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# metadata: The group member metadata. + + +JoinGroupResponseV2 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_name => STRING + leader => STRING + member_id => STRING + members => member_id metadata + member_id => STRING + metadata => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# metadata: The group member metadata. + + +JoinGroupResponseV3 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_name => STRING + leader => STRING + member_id => STRING + members => member_id metadata + member_id => STRING + metadata => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# metadata: The group member metadata. + + +JoinGroupResponseV4 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_name => STRING + leader => STRING + member_id => STRING + members => member_id metadata + member_id => STRING + metadata => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# metadata: The group member metadata. + + +JoinGroupResponseV5 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_name => STRING + leader => STRING + member_id => STRING + members => member_id group_instance_id metadata + member_id => STRING + group_instance_id => NULLABLE_STRING + metadata => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# metadata: The group member metadata. + + +JoinGroupResponseV6 => throttle_time_ms error_code generation_id protocol_name leader member_id {members} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_name => COMPACT_STRING + leader => COMPACT_STRING + member_id => COMPACT_STRING + members => member_id group_instance_id metadata TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + metadata => COMPACT_BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# metadata: The group member metadata. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +JoinGroupResponseV7 => throttle_time_ms error_code generation_id protocol_type protocol_name leader member_id {members} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_type => COMPACT_NULLABLE_STRING + protocol_name => COMPACT_NULLABLE_STRING + leader => COMPACT_STRING + member_id => COMPACT_STRING + members => member_id group_instance_id metadata TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + metadata => COMPACT_BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_type: The group protocol name. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# metadata: The group member metadata. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +JoinGroupResponseV8 => throttle_time_ms error_code generation_id protocol_type protocol_name leader member_id {members} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_type => COMPACT_NULLABLE_STRING + protocol_name => COMPACT_NULLABLE_STRING + leader => COMPACT_STRING + member_id => COMPACT_STRING + members => member_id group_instance_id metadata TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + metadata => COMPACT_BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_type: The group protocol name. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# metadata: The group member metadata. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +JoinGroupResponseV9 => throttle_time_ms error_code generation_id protocol_type protocol_name leader skip_assignment member_id {members} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + generation_id => INT32 + protocol_type => COMPACT_NULLABLE_STRING + protocol_name => COMPACT_NULLABLE_STRING + leader => COMPACT_STRING + skip_assignment => BOOLEAN + member_id => COMPACT_STRING + members => member_id group_instance_id metadata TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + metadata => COMPACT_BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# generation_id: The generation ID of the group. +# protocol_type: The group protocol name. +# protocol_name: The group protocol selected by the coordinator. +# leader: The leader of the group. +# skip_assignment: True if the leader must skip running the assignment. +# member_id: The member ID assigned by the group coordinator. +# members: The group members. +# member_id: The group member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# metadata: The group member metadata. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: Heartbeat, 12 +HeartbeatRequestV0 => group_id generation_id member_id + group_id => STRING + generation_id => INT32 + member_id => STRING + +# group_id: The group id. +# generation_id: The generation of the group. +# member_id: The member ID. + + +HeartbeatRequestV1 => group_id generation_id member_id + group_id => STRING + generation_id => INT32 + member_id => STRING + +# group_id: The group id. +# generation_id: The generation of the group. +# member_id: The member ID. + + +HeartbeatRequestV2 => group_id generation_id member_id + group_id => STRING + generation_id => INT32 + member_id => STRING + +# group_id: The group id. +# generation_id: The generation of the group. +# member_id: The member ID. + + +HeartbeatRequestV3 => group_id generation_id member_id group_instance_id + group_id => STRING + generation_id => INT32 + member_id => STRING + group_instance_id => NULLABLE_STRING + +# group_id: The group id. +# generation_id: The generation of the group. +# member_id: The member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. + + +HeartbeatRequestV4 => group_id generation_id member_id group_instance_id TAG_BUFFER + group_id => COMPACT_STRING + generation_id => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + +# group_id: The group id. +# generation_id: The generation of the group. +# member_id: The member ID. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# _tagged_fields: The tagged fields + + +HeartbeatResponseV0 => error_code + error_code => INT16 + +# error_code: The error code, or 0 if there was no error. + + +HeartbeatResponseV1 => throttle_time_ms error_code + throttle_time_ms => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. + + +HeartbeatResponseV2 => throttle_time_ms error_code + throttle_time_ms => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. + + +HeartbeatResponseV3 => throttle_time_ms error_code + throttle_time_ms => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. + + +HeartbeatResponseV4 => throttle_time_ms error_code TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields + + +#ApiKey: LeaveGroup, 13 +LeaveGroupRequestV0 => group_id member_id + group_id => STRING + member_id => STRING + +# group_id: The ID of the group to leave. +# member_id: The member ID to remove from the group. + + +LeaveGroupRequestV1 => group_id member_id + group_id => STRING + member_id => STRING + +# group_id: The ID of the group to leave. +# member_id: The member ID to remove from the group. + + +LeaveGroupRequestV2 => group_id member_id + group_id => STRING + member_id => STRING + +# group_id: The ID of the group to leave. +# member_id: The member ID to remove from the group. + + +LeaveGroupRequestV3 => group_id [members] + group_id => STRING + members => member_id group_instance_id + member_id => STRING + group_instance_id => NULLABLE_STRING + +# group_id: The ID of the group to leave. +# members: List of leaving member identities. +# member_id: The member ID to remove from the group. +# group_instance_id: The group instance ID to remove from the group. + + +LeaveGroupRequestV4 => group_id {members} TAG_BUFFER + group_id => COMPACT_STRING + members => member_id group_instance_id TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + +# group_id: The ID of the group to leave. +# members: List of leaving member identities. +# member_id: The member ID to remove from the group. +# group_instance_id: The group instance ID to remove from the group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +LeaveGroupRequestV5 => group_id {members} TAG_BUFFER + group_id => COMPACT_STRING + members => member_id group_instance_id reason TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + reason => COMPACT_NULLABLE_STRING + +# group_id: The ID of the group to leave. +# members: List of leaving member identities. +# member_id: The member ID to remove from the group. +# group_instance_id: The group instance ID to remove from the group. +# reason: The reason why the member left the group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +LeaveGroupResponseV0 => error_code + error_code => INT16 + +# error_code: The error code, or 0 if there was no error. + + +LeaveGroupResponseV1 => throttle_time_ms error_code + throttle_time_ms => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. + + +LeaveGroupResponseV2 => throttle_time_ms error_code + throttle_time_ms => INT32 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. + + +LeaveGroupResponseV3 => throttle_time_ms error_code [members] + throttle_time_ms => INT32 + error_code => INT16 + members => member_id group_instance_id error_code + member_id => STRING + group_instance_id => NULLABLE_STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# members: List of leaving member responses. +# member_id: The member ID to remove from the group. +# group_instance_id: The group instance ID to remove from the group. +# error_code: The error code, or 0 if there was no error. + + +LeaveGroupResponseV4 => throttle_time_ms error_code {members} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + members => member_id group_instance_id error_code TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# members: List of leaving member responses. +# member_id: The member ID to remove from the group. +# group_instance_id: The group instance ID to remove from the group. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +LeaveGroupResponseV5 => throttle_time_ms error_code {members} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + members => member_id group_instance_id error_code TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# members: List of leaving member responses. +# member_id: The member ID to remove from the group. +# group_instance_id: The group instance ID to remove from the group. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: SyncGroup, 14 +SyncGroupRequestV0 => group_id generation_id member_id [assignments] + group_id => STRING + generation_id => INT32 + member_id => STRING + assignments => member_id assignment + member_id => STRING + assignment => BYTES + +# group_id: The unique group identifier. +# generation_id: The generation of the group. +# member_id: The member ID assigned by the group. +# assignments: Each assignment. +# member_id: The ID of the member to assign. +# assignment: The member assignment. + + +SyncGroupRequestV1 => group_id generation_id member_id [assignments] + group_id => STRING + generation_id => INT32 + member_id => STRING + assignments => member_id assignment + member_id => STRING + assignment => BYTES + +# group_id: The unique group identifier. +# generation_id: The generation of the group. +# member_id: The member ID assigned by the group. +# assignments: Each assignment. +# member_id: The ID of the member to assign. +# assignment: The member assignment. + + +SyncGroupRequestV2 => group_id generation_id member_id [assignments] + group_id => STRING + generation_id => INT32 + member_id => STRING + assignments => member_id assignment + member_id => STRING + assignment => BYTES + +# group_id: The unique group identifier. +# generation_id: The generation of the group. +# member_id: The member ID assigned by the group. +# assignments: Each assignment. +# member_id: The ID of the member to assign. +# assignment: The member assignment. + + +SyncGroupRequestV3 => group_id generation_id member_id group_instance_id [assignments] + group_id => STRING + generation_id => INT32 + member_id => STRING + group_instance_id => NULLABLE_STRING + assignments => member_id assignment + member_id => STRING + assignment => BYTES + +# group_id: The unique group identifier. +# generation_id: The generation of the group. +# member_id: The member ID assigned by the group. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# assignments: Each assignment. +# member_id: The ID of the member to assign. +# assignment: The member assignment. + + +SyncGroupRequestV4 => group_id generation_id member_id group_instance_id {assignments} TAG_BUFFER + group_id => COMPACT_STRING + generation_id => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + assignments => member_id assignment TAG_BUFFER + member_id => COMPACT_STRING + assignment => COMPACT_BYTES + +# group_id: The unique group identifier. +# generation_id: The generation of the group. +# member_id: The member ID assigned by the group. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# assignments: Each assignment. +# member_id: The ID of the member to assign. +# assignment: The member assignment. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +SyncGroupRequestV5 => group_id generation_id member_id group_instance_id protocol_type protocol_name {assignments} TAG_BUFFER + group_id => COMPACT_STRING + generation_id => INT32 + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + protocol_type => COMPACT_NULLABLE_STRING + protocol_name => COMPACT_NULLABLE_STRING + assignments => member_id assignment TAG_BUFFER + member_id => COMPACT_STRING + assignment => COMPACT_BYTES + +# group_id: The unique group identifier. +# generation_id: The generation of the group. +# member_id: The member ID assigned by the group. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# protocol_type: The group protocol type. +# protocol_name: The group protocol name. +# assignments: Each assignment. +# member_id: The ID of the member to assign. +# assignment: The member assignment. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +SyncGroupResponseV0 => error_code assignment + error_code => INT16 + assignment => BYTES + +# error_code: The error code, or 0 if there was no error. +# assignment: The member assignment. + + +SyncGroupResponseV1 => throttle_time_ms error_code assignment + throttle_time_ms => INT32 + error_code => INT16 + assignment => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# assignment: The member assignment. + + +SyncGroupResponseV2 => throttle_time_ms error_code assignment + throttle_time_ms => INT32 + error_code => INT16 + assignment => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# assignment: The member assignment. + + +SyncGroupResponseV3 => throttle_time_ms error_code assignment + throttle_time_ms => INT32 + error_code => INT16 + assignment => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# assignment: The member assignment. + + +SyncGroupResponseV4 => throttle_time_ms error_code assignment TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + assignment => COMPACT_BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# assignment: The member assignment. +# _tagged_fields: The tagged fields + + +SyncGroupResponseV5 => throttle_time_ms error_code protocol_type protocol_name assignment TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + protocol_type => COMPACT_NULLABLE_STRING + protocol_name => COMPACT_NULLABLE_STRING + assignment => COMPACT_BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# protocol_type: The group protocol type. +# protocol_name: The group protocol name. +# assignment: The member assignment. +# _tagged_fields: The tagged fields + + +#ApiKey: DescribeGroups, 15 +DescribeGroupsRequestV0 => [groups] + groups => STRING + +# groups: The names of the groups to describe. + + +DescribeGroupsRequestV1 => [groups] + groups => STRING + +# groups: The names of the groups to describe. + + +DescribeGroupsRequestV2 => [groups] + groups => STRING + +# groups: The names of the groups to describe. + + +DescribeGroupsRequestV3 => [groups] include_authorized_operations + groups => STRING + include_authorized_operations => BOOLEAN + +# groups: The names of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. + + +DescribeGroupsRequestV4 => [groups] include_authorized_operations + groups => STRING + include_authorized_operations => BOOLEAN + +# groups: The names of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. + + +DescribeGroupsRequestV5 => {groups} include_authorized_operations TAG_BUFFER + groups => COMPACT_STRING + include_authorized_operations => BOOLEAN + +# groups: The names of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. +# _tagged_fields: The tagged fields + + +DescribeGroupsRequestV6 => {groups} include_authorized_operations TAG_BUFFER + groups => COMPACT_STRING + include_authorized_operations => BOOLEAN + +# groups: The names of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. +# _tagged_fields: The tagged fields + + +DescribeGroupsResponseV0 => [groups] + groups => error_code group_id group_state protocol_type protocol_data [members] + error_code => INT16 + group_id => STRING + group_state => STRING + protocol_type => STRING + protocol_data => STRING + members => member_id client_id client_host member_metadata member_assignment + member_id => STRING + client_id => STRING + client_host => STRING + member_metadata => BYTES + member_assignment => BYTES + +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. + + +DescribeGroupsResponseV1 => throttle_time_ms [groups] + throttle_time_ms => INT32 + groups => error_code group_id group_state protocol_type protocol_data [members] + error_code => INT16 + group_id => STRING + group_state => STRING + protocol_type => STRING + protocol_data => STRING + members => member_id client_id client_host member_metadata member_assignment + member_id => STRING + client_id => STRING + client_host => STRING + member_metadata => BYTES + member_assignment => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. + + +DescribeGroupsResponseV2 => throttle_time_ms [groups] + throttle_time_ms => INT32 + groups => error_code group_id group_state protocol_type protocol_data [members] + error_code => INT16 + group_id => STRING + group_state => STRING + protocol_type => STRING + protocol_data => STRING + members => member_id client_id client_host member_metadata member_assignment + member_id => STRING + client_id => STRING + client_host => STRING + member_metadata => BYTES + member_assignment => BYTES + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. + + +DescribeGroupsResponseV3 => throttle_time_ms [groups] + throttle_time_ms => INT32 + groups => error_code group_id group_state protocol_type protocol_data [members] authorized_operations + error_code => INT16 + group_id => STRING + group_state => STRING + protocol_type => STRING + protocol_data => STRING + members => member_id client_id client_host member_metadata member_assignment + member_id => STRING + client_id => STRING + client_host => STRING + member_metadata => BYTES + member_assignment => BYTES + authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. + + +DescribeGroupsResponseV4 => throttle_time_ms [groups] + throttle_time_ms => INT32 + groups => error_code group_id group_state protocol_type protocol_data [members] authorized_operations + error_code => INT16 + group_id => STRING + group_state => STRING + protocol_type => STRING + protocol_data => STRING + members => member_id group_instance_id client_id client_host member_metadata member_assignment + member_id => STRING + group_instance_id => NULLABLE_STRING + client_id => STRING + client_host => STRING + member_metadata => BYTES + member_assignment => BYTES + authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. + + +DescribeGroupsResponseV5 => throttle_time_ms {groups} TAG_BUFFER + throttle_time_ms => INT32 + groups => error_code group_id group_state protocol_type protocol_data {members} authorized_operations TAG_BUFFER + error_code => INT16 + group_id => COMPACT_STRING + group_state => COMPACT_STRING + protocol_type => COMPACT_STRING + protocol_data => COMPACT_STRING + members => member_id group_instance_id client_id client_host member_metadata member_assignment TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + client_id => COMPACT_STRING + client_host => COMPACT_STRING + member_metadata => COMPACT_BYTES + member_assignment => COMPACT_BYTES + authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. +# _tagged_fields: The tagged fields +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +DescribeGroupsResponseV6 => throttle_time_ms {groups} TAG_BUFFER + throttle_time_ms => INT32 + groups => error_code error_message group_id group_state protocol_type protocol_data {members} authorized_operations TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + group_id => COMPACT_STRING + group_state => COMPACT_STRING + protocol_type => COMPACT_STRING + protocol_data => COMPACT_STRING + members => member_id group_instance_id client_id client_host member_metadata member_assignment TAG_BUFFER + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + client_id => COMPACT_STRING + client_host => COMPACT_STRING + member_metadata => COMPACT_BYTES + member_assignment => COMPACT_BYTES + authorized_operations => INT32 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# error_message: The describe error message, or null if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# protocol_type: The group protocol type, or the empty string. +# protocol_data: The group protocol data, or the empty string. +# members: The group members. +# member_id: The member id. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# client_id: The client ID used in the member's latest join group request. +# client_host: The client host. +# member_metadata: The metadata corresponding to the current group protocol in use. +# member_assignment: The current assignment provided by the group leader. +# _tagged_fields: The tagged fields +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: ListGroups, 16 +ListGroupsRequestV0 => + + + +ListGroupsRequestV1 => + + + +ListGroupsRequestV2 => + + + +ListGroupsRequestV3 => TAG_BUFFER + +# _tagged_fields: The tagged fields + + +ListGroupsRequestV4 => {states_filter} TAG_BUFFER + states_filter => COMPACT_STRING + +# states_filter: The states of the groups we want to list. If empty, all groups are returned with their state. +# _tagged_fields: The tagged fields + + +ListGroupsRequestV5 => {states_filter} {types_filter} TAG_BUFFER + states_filter => COMPACT_STRING + types_filter => COMPACT_STRING + +# states_filter: The states of the groups we want to list. If empty, all groups are returned with their state. +# types_filter: The types of the groups we want to list. If empty, all groups are returned with their type. +# _tagged_fields: The tagged fields + + +ListGroupsResponseV0 => error_code [groups] + error_code => INT16 + groups => group_id protocol_type + group_id => STRING + protocol_type => STRING + +# error_code: The error code, or 0 if there was no error. +# groups: Each group in the response. +# group_id: The group ID. +# protocol_type: The group protocol type. + + +ListGroupsResponseV1 => throttle_time_ms error_code [groups] + throttle_time_ms => INT32 + error_code => INT16 + groups => group_id protocol_type + group_id => STRING + protocol_type => STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# groups: Each group in the response. +# group_id: The group ID. +# protocol_type: The group protocol type. + + +ListGroupsResponseV2 => throttle_time_ms error_code [groups] + throttle_time_ms => INT32 + error_code => INT16 + groups => group_id protocol_type + group_id => STRING + protocol_type => STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# groups: Each group in the response. +# group_id: The group ID. +# protocol_type: The group protocol type. + + +ListGroupsResponseV3 => throttle_time_ms error_code {groups} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + groups => group_id protocol_type TAG_BUFFER + group_id => COMPACT_STRING + protocol_type => COMPACT_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# groups: Each group in the response. +# group_id: The group ID. +# protocol_type: The group protocol type. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +ListGroupsResponseV4 => throttle_time_ms error_code {groups} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + groups => group_id protocol_type group_state TAG_BUFFER + group_id => COMPACT_STRING + protocol_type => COMPACT_STRING + group_state => COMPACT_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# groups: Each group in the response. +# group_id: The group ID. +# protocol_type: The group protocol type. +# group_state: The group state name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +ListGroupsResponseV5 => throttle_time_ms error_code {groups} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + groups => group_id protocol_type group_state group_type TAG_BUFFER + group_id => COMPACT_STRING + protocol_type => COMPACT_STRING + group_state => COMPACT_STRING + group_type => COMPACT_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# groups: Each group in the response. +# group_id: The group ID. +# protocol_type: The group protocol type. +# group_state: The group state name. +# group_type: The group type name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: SaslHandshake, 17 +SaslHandshakeRequestV0 => mechanism + mechanism => STRING + +# mechanism: The SASL mechanism chosen by the client. + + +SaslHandshakeRequestV1 => mechanism + mechanism => STRING + +# mechanism: The SASL mechanism chosen by the client. + + +SaslHandshakeResponseV0 => error_code [mechanisms] + error_code => INT16 + mechanisms => STRING + +# error_code: The error code, or 0 if there was no error. +# mechanisms: The mechanisms enabled in the server. + + +SaslHandshakeResponseV1 => error_code [mechanisms] + error_code => INT16 + mechanisms => STRING + +# error_code: The error code, or 0 if there was no error. +# mechanisms: The mechanisms enabled in the server. + + +#ApiKey: ApiVersions, 18 +ApiVersionsRequestV0 => + + + +ApiVersionsRequestV1 => + + + +ApiVersionsRequestV2 => + + + +ApiVersionsRequestV3 => client_software_name client_software_version TAG_BUFFER + client_software_name => COMPACT_STRING + client_software_version => COMPACT_STRING + +# client_software_name: The name of the client. +# client_software_version: The version of the client. +# _tagged_fields: The tagged fields + + +ApiVersionsRequestV4 => client_software_name client_software_version TAG_BUFFER + client_software_name => COMPACT_STRING + client_software_version => COMPACT_STRING + +# client_software_name: The name of the client. +# client_software_version: The version of the client. +# _tagged_fields: The tagged fields + + +ApiVersionsResponseV0 => error_code [api_keys] + error_code => INT16 + api_keys => api_key min_version max_version + api_key => INT16 + min_version => INT16 + max_version => INT16 + +# error_code: The top-level error code. +# api_keys: The APIs supported by the broker. +# api_key: The API index. +# min_version: The minimum supported version, inclusive. +# max_version: The maximum supported version, inclusive. + + +ApiVersionsResponseV1 => error_code [api_keys] throttle_time_ms + error_code => INT16 + api_keys => api_key min_version max_version + api_key => INT16 + min_version => INT16 + max_version => INT16 + throttle_time_ms => INT32 + +# error_code: The top-level error code. +# api_keys: The APIs supported by the broker. +# api_key: The API index. +# min_version: The minimum supported version, inclusive. +# max_version: The maximum supported version, inclusive. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. + + +ApiVersionsResponseV2 => error_code [api_keys] throttle_time_ms + error_code => INT16 + api_keys => api_key min_version max_version + api_key => INT16 + min_version => INT16 + max_version => INT16 + throttle_time_ms => INT32 + +# error_code: The top-level error code. +# api_keys: The APIs supported by the broker. +# api_key: The API index. +# min_version: The minimum supported version, inclusive. +# max_version: The maximum supported version, inclusive. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. + + +ApiVersionsResponseV3 => error_code {api_keys} throttle_time_ms TAG_BUFFER + error_code => INT16 + api_keys => api_key min_version max_version TAG_BUFFER + api_key => INT16 + min_version => INT16 + max_version => INT16 + throttle_time_ms => INT32 + +# error_code: The top-level error code. +# api_keys: The APIs supported by the broker. +# api_key: The API index. +# min_version: The minimum supported version, inclusive. +# max_version: The maximum supported version, inclusive. +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields + + +ApiVersionsResponseV4 => error_code {api_keys} throttle_time_ms TAG_BUFFER + error_code => INT16 + api_keys => api_key min_version max_version TAG_BUFFER + api_key => INT16 + min_version => INT16 + max_version => INT16 + throttle_time_ms => INT32 + +# error_code: The top-level error code. +# api_keys: The APIs supported by the broker. +# api_key: The API index. +# min_version: The minimum supported version, inclusive. +# max_version: The maximum supported version, inclusive. +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields + + +#ApiKey: CreateTopics, 19 +CreateTopicsRequestV2 => [topics] timeout_ms validate_only + topics => name num_partitions replication_factor [assignments] [configs] + name => STRING + num_partitions => INT32 + replication_factor => INT16 + assignments => partition_index [broker_ids] + partition_index => INT32 + broker_ids => INT32 + configs => name value + name => STRING + value => NULLABLE_STRING + timeout_ms => INT32 + validate_only => BOOLEAN + +# topics: The topics to create. +# name: The topic name. +# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. +# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. +# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. +# partition_index: The partition index. +# broker_ids: The brokers to place the partition on. +# configs: The custom topic configurations to set. +# name: The configuration name. +# value: The configuration value. +# timeout_ms: How long to wait in milliseconds before timing out the request. +# validate_only: If true, check that the topics can be created as specified, but don't create anything. + + +CreateTopicsRequestV3 => [topics] timeout_ms validate_only + topics => name num_partitions replication_factor [assignments] [configs] + name => STRING + num_partitions => INT32 + replication_factor => INT16 + assignments => partition_index [broker_ids] + partition_index => INT32 + broker_ids => INT32 + configs => name value + name => STRING + value => NULLABLE_STRING + timeout_ms => INT32 + validate_only => BOOLEAN + +# topics: The topics to create. +# name: The topic name. +# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. +# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. +# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. +# partition_index: The partition index. +# broker_ids: The brokers to place the partition on. +# configs: The custom topic configurations to set. +# name: The configuration name. +# value: The configuration value. +# timeout_ms: How long to wait in milliseconds before timing out the request. +# validate_only: If true, check that the topics can be created as specified, but don't create anything. + + +CreateTopicsRequestV4 => [topics] timeout_ms validate_only + topics => name num_partitions replication_factor [assignments] [configs] + name => STRING + num_partitions => INT32 + replication_factor => INT16 + assignments => partition_index [broker_ids] + partition_index => INT32 + broker_ids => INT32 + configs => name value + name => STRING + value => NULLABLE_STRING + timeout_ms => INT32 + validate_only => BOOLEAN + +# topics: The topics to create. +# name: The topic name. +# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. +# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. +# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. +# partition_index: The partition index. +# broker_ids: The brokers to place the partition on. +# configs: The custom topic configurations to set. +# name: The configuration name. +# value: The configuration value. +# timeout_ms: How long to wait in milliseconds before timing out the request. +# validate_only: If true, check that the topics can be created as specified, but don't create anything. + + +CreateTopicsRequestV5 => {topics} timeout_ms validate_only TAG_BUFFER + topics => name num_partitions replication_factor {assignments} {configs} TAG_BUFFER + name => COMPACT_STRING + num_partitions => INT32 + replication_factor => INT16 + assignments => partition_index {broker_ids} TAG_BUFFER + partition_index => INT32 + broker_ids => INT32 + configs => name value TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + timeout_ms => INT32 + validate_only => BOOLEAN + +# topics: The topics to create. +# name: The topic name. +# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. +# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. +# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. +# partition_index: The partition index. +# broker_ids: The brokers to place the partition on. +# _tagged_fields: The tagged fields +# configs: The custom topic configurations to set. +# name: The configuration name. +# value: The configuration value. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# timeout_ms: How long to wait in milliseconds before timing out the request. +# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# _tagged_fields: The tagged fields + + +CreateTopicsRequestV6 => {topics} timeout_ms validate_only TAG_BUFFER + topics => name num_partitions replication_factor {assignments} {configs} TAG_BUFFER + name => COMPACT_STRING + num_partitions => INT32 + replication_factor => INT16 + assignments => partition_index {broker_ids} TAG_BUFFER + partition_index => INT32 + broker_ids => INT32 + configs => name value TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + timeout_ms => INT32 + validate_only => BOOLEAN + +# topics: The topics to create. +# name: The topic name. +# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. +# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. +# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. +# partition_index: The partition index. +# broker_ids: The brokers to place the partition on. +# _tagged_fields: The tagged fields +# configs: The custom topic configurations to set. +# name: The configuration name. +# value: The configuration value. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# timeout_ms: How long to wait in milliseconds before timing out the request. +# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# _tagged_fields: The tagged fields + + +CreateTopicsRequestV7 => {topics} timeout_ms validate_only TAG_BUFFER + topics => name num_partitions replication_factor {assignments} {configs} TAG_BUFFER + name => COMPACT_STRING + num_partitions => INT32 + replication_factor => INT16 + assignments => partition_index {broker_ids} TAG_BUFFER + partition_index => INT32 + broker_ids => INT32 + configs => name value TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + timeout_ms => INT32 + validate_only => BOOLEAN + +# topics: The topics to create. +# name: The topic name. +# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. +# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. +# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. +# partition_index: The partition index. +# broker_ids: The brokers to place the partition on. +# _tagged_fields: The tagged fields +# configs: The custom topic configurations to set. +# name: The configuration name. +# value: The configuration value. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# timeout_ms: How long to wait in milliseconds before timing out the request. +# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# _tagged_fields: The tagged fields + + + + + + +CreateTopicsResponseV2 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name error_code error_message + name => STRING + error_code => INT16 + error_message => NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Results for each topic we tried to create. +# name: The topic name. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. + + +CreateTopicsResponseV3 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name error_code error_message + name => STRING + error_code => INT16 + error_message => NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Results for each topic we tried to create. +# name: The topic name. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. + + +CreateTopicsResponseV4 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name error_code error_message + name => STRING + error_code => INT16 + error_message => NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Results for each topic we tried to create. +# name: The topic name. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. + + +CreateTopicsResponseV5 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name error_code error_message num_partitions replication_factor {configs} TAG_BUFFER + name => COMPACT_STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + num_partitions => INT32 + replication_factor => INT16 + configs => name value read_only config_source is_sensitive TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Results for each topic we tried to create. +# name: The topic name. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# num_partitions: Number of partitions of the topic. +# replication_factor: Replication factor of the topic. +# configs: Configuration of the topic. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +CreateTopicsResponseV6 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name error_code error_message num_partitions replication_factor {configs} TAG_BUFFER + name => COMPACT_STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + num_partitions => INT32 + replication_factor => INT16 + configs => name value read_only config_source is_sensitive TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Results for each topic we tried to create. +# name: The topic name. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# num_partitions: Number of partitions of the topic. +# replication_factor: Replication factor of the topic. +# configs: Configuration of the topic. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +CreateTopicsResponseV7 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name topic_id error_code error_message num_partitions replication_factor {configs} TAG_BUFFER + name => COMPACT_STRING + topic_id => UUID + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + num_partitions => INT32 + replication_factor => INT16 + configs => name value read_only config_source is_sensitive TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Results for each topic we tried to create. +# name: The topic name. +# topic_id: The unique topic ID. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# num_partitions: Number of partitions of the topic. +# replication_factor: Replication factor of the topic. +# configs: Configuration of the topic. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: DeleteTopics, 20 +DeleteTopicsRequestV1 => [topic_names] timeout_ms + topic_names => STRING + timeout_ms => INT32 + +# topic_names: The names of the topics to delete. +# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. + + +DeleteTopicsRequestV2 => [topic_names] timeout_ms + topic_names => STRING + timeout_ms => INT32 + +# topic_names: The names of the topics to delete. +# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. + + +DeleteTopicsRequestV3 => [topic_names] timeout_ms + topic_names => STRING + timeout_ms => INT32 + +# topic_names: The names of the topics to delete. +# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. + + +DeleteTopicsRequestV4 => {topic_names} timeout_ms TAG_BUFFER + topic_names => COMPACT_STRING + timeout_ms => INT32 + +# topic_names: The names of the topics to delete. +# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. +# _tagged_fields: The tagged fields + + +DeleteTopicsRequestV5 => {topic_names} timeout_ms TAG_BUFFER + topic_names => COMPACT_STRING + timeout_ms => INT32 + +# topic_names: The names of the topics to delete. +# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. +# _tagged_fields: The tagged fields + + +DeleteTopicsRequestV6 => {topics} timeout_ms TAG_BUFFER + topics => name topic_id TAG_BUFFER + name => COMPACT_NULLABLE_STRING + topic_id => UUID + timeout_ms => INT32 + +# topics: The name or topic ID of the topic. # name: The topic name. -# partitions: The responses for each partition in the topic. +# topic_id: The unique topic ID. +# _tagged_fields: The tagged fields +# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. +# _tagged_fields: The tagged fields + + + + +DeleteTopicsResponseV1 => throttle_time_ms [responses] + throttle_time_ms => INT32 + responses => name error_code + name => STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The results for each topic we tried to delete. +# name: The topic name. +# error_code: The deletion error, or 0 if the deletion succeeded. + + +DeleteTopicsResponseV2 => throttle_time_ms [responses] + throttle_time_ms => INT32 + responses => name error_code + name => STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The results for each topic we tried to delete. +# name: The topic name. +# error_code: The deletion error, or 0 if the deletion succeeded. + + +DeleteTopicsResponseV3 => throttle_time_ms [responses] + throttle_time_ms => INT32 + responses => name error_code + name => STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The results for each topic we tried to delete. +# name: The topic name. +# error_code: The deletion error, or 0 if the deletion succeeded. + + +DeleteTopicsResponseV4 => throttle_time_ms {responses} TAG_BUFFER + throttle_time_ms => INT32 + responses => name error_code TAG_BUFFER + name => COMPACT_STRING + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The results for each topic we tried to delete. +# name: The topic name. +# error_code: The deletion error, or 0 if the deletion succeeded. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +DeleteTopicsResponseV5 => throttle_time_ms {responses} TAG_BUFFER + throttle_time_ms => INT32 + responses => name error_code error_message TAG_BUFFER + name => COMPACT_STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The results for each topic we tried to delete. +# name: The topic name. +# error_code: The deletion error, or 0 if the deletion succeeded. +# error_message: The error message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +DeleteTopicsResponseV6 => throttle_time_ms {responses} TAG_BUFFER + throttle_time_ms => INT32 + responses => name topic_id error_code error_message TAG_BUFFER + name => COMPACT_NULLABLE_STRING + topic_id => UUID + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The results for each topic we tried to delete. +# name: The topic name. +# topic_id: The unique topic ID. +# error_code: The deletion error, or 0 if the deletion succeeded. +# error_message: The error message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: DeleteRecords, 21 +DeleteRecordsRequestV0 => [topics] timeout_ms + topics => name [partitions] + name => STRING + partitions => partition_index offset + partition_index => INT32 + offset => INT64 + timeout_ms => INT32 + +# topics: Each topic that we want to delete records from. +# name: The topic name. +# partitions: Each partition that we want to delete records from. +# partition_index: The partition index. +# offset: The deletion offset. +# timeout_ms: How long to wait for the deletion to complete, in milliseconds. + + +DeleteRecordsRequestV1 => [topics] timeout_ms + topics => name [partitions] + name => STRING + partitions => partition_index offset + partition_index => INT32 + offset => INT64 + timeout_ms => INT32 + +# topics: Each topic that we want to delete records from. +# name: The topic name. +# partitions: Each partition that we want to delete records from. +# partition_index: The partition index. +# offset: The deletion offset. +# timeout_ms: How long to wait for the deletion to complete, in milliseconds. + + +DeleteRecordsRequestV2 => {topics} timeout_ms TAG_BUFFER + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index offset TAG_BUFFER + partition_index => INT32 + offset => INT64 + timeout_ms => INT32 + +# topics: Each topic that we want to delete records from. +# name: The topic name. +# partitions: Each partition that we want to delete records from. +# partition_index: The partition index. +# offset: The deletion offset. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# timeout_ms: How long to wait for the deletion to complete, in milliseconds. +# _tagged_fields: The tagged fields + + +DeleteRecordsResponseV0 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index low_watermark error_code + partition_index => INT32 + low_watermark => INT64 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic that we wanted to delete records from. +# name: The topic name. +# partitions: Each partition that we wanted to delete records from. +# partition_index: The partition index. +# low_watermark: The partition low water mark. +# error_code: The deletion error code, or 0 if the deletion succeeded. + + +DeleteRecordsResponseV1 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index low_watermark error_code + partition_index => INT32 + low_watermark => INT64 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic that we wanted to delete records from. +# name: The topic name. +# partitions: Each partition that we wanted to delete records from. +# partition_index: The partition index. +# low_watermark: The partition low water mark. +# error_code: The deletion error code, or 0 if the deletion succeeded. + + +DeleteRecordsResponseV2 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index low_watermark error_code TAG_BUFFER + partition_index => INT32 + low_watermark => INT64 + error_code => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic that we wanted to delete records from. +# name: The topic name. +# partitions: Each partition that we wanted to delete records from. # partition_index: The partition index. +# low_watermark: The partition low water mark. +# error_code: The deletion error code, or 0 if the deletion succeeded. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: InitProducerId, 22 +InitProducerIdRequestV0 => transactional_id transaction_timeout_ms + transactional_id => NULLABLE_STRING + transaction_timeout_ms => INT32 + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. + + +InitProducerIdRequestV1 => transactional_id transaction_timeout_ms + transactional_id => NULLABLE_STRING + transaction_timeout_ms => INT32 + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. + + +InitProducerIdRequestV2 => transactional_id transaction_timeout_ms TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + transaction_timeout_ms => INT32 + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# _tagged_fields: The tagged fields + + +InitProducerIdRequestV3 => transactional_id transaction_timeout_ms producer_id producer_epoch TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + transaction_timeout_ms => INT32 + producer_id => INT64 + producer_epoch => INT16 + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# producer_id: The producer id. This is used to disambiguate requests if a transactional id is reused following its expiration. +# producer_epoch: The producer's current epoch. This will be checked against the producer epoch on the broker, and the request will return an error if they do not match. +# _tagged_fields: The tagged fields + + +InitProducerIdRequestV4 => transactional_id transaction_timeout_ms producer_id producer_epoch TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + transaction_timeout_ms => INT32 + producer_id => INT64 + producer_epoch => INT16 + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# producer_id: The producer id. This is used to disambiguate requests if a transactional id is reused following its expiration. +# producer_epoch: The producer's current epoch. This will be checked against the producer epoch on the broker, and the request will return an error if they do not match. +# _tagged_fields: The tagged fields + + +InitProducerIdRequestV5 => transactional_id transaction_timeout_ms producer_id producer_epoch TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + transaction_timeout_ms => INT32 + producer_id => INT64 + producer_epoch => INT16 + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# producer_id: The producer id. This is used to disambiguate requests if a transactional id is reused following its expiration. +# producer_epoch: The producer's current epoch. This will be checked against the producer epoch on the broker, and the request will return an error if they do not match. +# _tagged_fields: The tagged fields + + +InitProducerIdRequestV6 => transactional_id transaction_timeout_ms producer_id producer_epoch enable2_pc keep_prepared_txn TAG_BUFFER + transactional_id => COMPACT_NULLABLE_STRING + transaction_timeout_ms => INT32 + producer_id => INT64 + producer_epoch => INT16 + enable2_pc => BOOLEAN + keep_prepared_txn => BOOLEAN + +# transactional_id: The transactional id, or null if the producer is not transactional. +# transaction_timeout_ms: The time in ms to wait before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# producer_id: The producer id. This is used to disambiguate requests if a transactional id is reused following its expiration. +# producer_epoch: The producer's current epoch. This will be checked against the producer epoch on the broker, and the request will return an error if they do not match. +# enable2_pc: True if the client wants to enable two-phase commit (2PC) protocol for transactions. +# keep_prepared_txn: True if the client wants to keep the currently ongoing transaction instead of aborting it. +# _tagged_fields: The tagged fields + + +InitProducerIdResponseV0 => throttle_time_ms error_code producer_id producer_epoch + throttle_time_ms => INT32 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. -OffsetCommitResponseV8 => throttle_time_ms {topics} TAG_BUFFER +InitProducerIdResponseV1 => throttle_time_ms error_code producer_id producer_epoch throttle_time_ms => INT32 - topics => name {partitions} TAG_BUFFER - name => COMPACT_STRING - partitions => partition_index error_code TAG_BUFFER - partition_index => INT32 - error_code => INT16 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. + + +InitProducerIdResponseV2 => throttle_time_ms error_code producer_id producer_epoch TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. -# name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. # _tagged_fields: The tagged fields + + +InitProducerIdResponseV3 => throttle_time_ms error_code producer_id producer_epoch TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. # _tagged_fields: The tagged fields + + +InitProducerIdResponseV4 => throttle_time_ms error_code producer_id producer_epoch TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. # _tagged_fields: The tagged fields -#ApiKey: OffsetFetch, 9 -OffsetFetchRequestV0 => group_id [topics] - group_id => STRING - topics => name [partition_indexes] - name => STRING - partition_indexes => INT32 +InitProducerIdResponseV5 => throttle_time_ms error_code producer_id producer_epoch TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. +# _tagged_fields: The tagged fields -OffsetFetchRequestV1 => group_id [topics] - group_id => STRING - topics => name [partition_indexes] - name => STRING - partition_indexes => INT32 +InitProducerIdResponseV6 => throttle_time_ms error_code producer_id producer_epoch ongoing_txn_producer_id ongoing_txn_producer_epoch TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + producer_id => INT64 + producer_epoch => INT16 + ongoing_txn_producer_id => INT64 + ongoing_txn_producer_epoch => INT16 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# producer_id: The current producer id. +# producer_epoch: The current epoch associated with the producer id. +# ongoing_txn_producer_id: The producer id for ongoing transaction when KeepPreparedTxn is used, -1 if there is no transaction ongoing. +# ongoing_txn_producer_epoch: The epoch associated with the producer id for ongoing transaction when KeepPreparedTxn is used, -1 if there is no transaction ongoing. +# _tagged_fields: The tagged fields -OffsetFetchRequestV2 => group_id [topics] - group_id => STRING - topics => name [partition_indexes] - name => STRING - partition_indexes => INT32 +#ApiKey: OffsetForLeaderEpoch, 23 +OffsetForLeaderEpochRequestV2 => [topics] + topics => topic [partitions] + topic => STRING + partitions => partition current_leader_epoch leader_epoch + partition => INT32 + current_leader_epoch => INT32 + leader_epoch => INT32 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# topics: Each topic to get offsets for. +# topic: The topic name. +# partitions: Each partition to get offsets for. +# partition: The partition index. +# current_leader_epoch: An epoch used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. +# leader_epoch: The epoch to look up an offset for. -OffsetFetchRequestV3 => group_id [topics] - group_id => STRING - topics => name [partition_indexes] +OffsetForLeaderEpochRequestV3 => replica_id [topics] + replica_id => INT32 + topics => topic [partitions] + topic => STRING + partitions => partition current_leader_epoch leader_epoch + partition => INT32 + current_leader_epoch => INT32 + leader_epoch => INT32 + +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# topics: Each topic to get offsets for. +# topic: The topic name. +# partitions: Each partition to get offsets for. +# partition: The partition index. +# current_leader_epoch: An epoch used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. +# leader_epoch: The epoch to look up an offset for. + + +OffsetForLeaderEpochRequestV4 => replica_id {topics} TAG_BUFFER + replica_id => INT32 + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => partition current_leader_epoch leader_epoch TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + leader_epoch => INT32 + +# replica_id: The broker ID of the follower, of -1 if this request is from a consumer. +# topics: Each topic to get offsets for. +# topic: The topic name. +# partitions: Each partition to get offsets for. +# partition: The partition index. +# current_leader_epoch: An epoch used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. +# leader_epoch: The epoch to look up an offset for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + + + + + +OffsetForLeaderEpochResponseV2 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => topic [partitions] + topic => STRING + partitions => error_code partition leader_epoch end_offset + error_code => INT16 + partition => INT32 + leader_epoch => INT32 + end_offset => INT64 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic we fetched offsets for. +# topic: The topic name. +# partitions: Each partition in the topic we fetched offsets for. +# error_code: The error code 0, or if there was no error. +# partition: The partition index. +# leader_epoch: The leader epoch of the partition. +# end_offset: The end offset of the epoch. + + +OffsetForLeaderEpochResponseV3 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => topic [partitions] + topic => STRING + partitions => error_code partition leader_epoch end_offset + error_code => INT16 + partition => INT32 + leader_epoch => INT32 + end_offset => INT64 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic we fetched offsets for. +# topic: The topic name. +# partitions: Each partition in the topic we fetched offsets for. +# error_code: The error code 0, or if there was no error. +# partition: The partition index. +# leader_epoch: The leader epoch of the partition. +# end_offset: The end offset of the epoch. + + +OffsetForLeaderEpochResponseV4 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => error_code partition leader_epoch end_offset TAG_BUFFER + error_code => INT16 + partition => INT32 + leader_epoch => INT32 + end_offset => INT64 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic we fetched offsets for. +# topic: The topic name. +# partitions: Each partition in the topic we fetched offsets for. +# error_code: The error code 0, or if there was no error. +# partition: The partition index. +# leader_epoch: The leader epoch of the partition. +# end_offset: The end offset of the epoch. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: AddPartitionsToTxn, 24 +AddPartitionsToTxnRequestV0 => v3_and_below_transactional_id v3_and_below_producer_id v3_and_below_producer_epoch [v3_and_below_topics] + v3_and_below_transactional_id => STRING + v3_and_below_producer_id => INT64 + v3_and_below_producer_epoch => INT16 + v3_and_below_topics => name [partitions] name => STRING - partition_indexes => INT32 + partitions => INT32 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# v3_and_below_transactional_id: The transactional id corresponding to the transaction. +# v3_and_below_producer_id: Current producer id in use by the transactional id. +# v3_and_below_producer_epoch: Current epoch associated with the producer id. +# v3_and_below_topics: The partitions to add to the transaction. +# name: The name of the topic. +# partitions: The partition indexes to add to the transaction. -OffsetFetchRequestV4 => group_id [topics] - group_id => STRING - topics => name [partition_indexes] +AddPartitionsToTxnRequestV1 => v3_and_below_transactional_id v3_and_below_producer_id v3_and_below_producer_epoch [v3_and_below_topics] + v3_and_below_transactional_id => STRING + v3_and_below_producer_id => INT64 + v3_and_below_producer_epoch => INT16 + v3_and_below_topics => name [partitions] name => STRING - partition_indexes => INT32 + partitions => INT32 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# v3_and_below_transactional_id: The transactional id corresponding to the transaction. +# v3_and_below_producer_id: Current producer id in use by the transactional id. +# v3_and_below_producer_epoch: Current epoch associated with the producer id. +# v3_and_below_topics: The partitions to add to the transaction. +# name: The name of the topic. +# partitions: The partition indexes to add to the transaction. -OffsetFetchRequestV5 => group_id [topics] - group_id => STRING - topics => name [partition_indexes] +AddPartitionsToTxnRequestV2 => v3_and_below_transactional_id v3_and_below_producer_id v3_and_below_producer_epoch [v3_and_below_topics] + v3_and_below_transactional_id => STRING + v3_and_below_producer_id => INT64 + v3_and_below_producer_epoch => INT16 + v3_and_below_topics => name [partitions] name => STRING - partition_indexes => INT32 + partitions => INT32 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# v3_and_below_transactional_id: The transactional id corresponding to the transaction. +# v3_and_below_producer_id: Current producer id in use by the transactional id. +# v3_and_below_producer_epoch: Current epoch associated with the producer id. +# v3_and_below_topics: The partitions to add to the transaction. +# name: The name of the topic. +# partitions: The partition indexes to add to the transaction. -OffsetFetchRequestV6 => group_id {topics} TAG_BUFFER - group_id => COMPACT_STRING - topics => name {partition_indexes} TAG_BUFFER +AddPartitionsToTxnRequestV3 => v3_and_below_transactional_id v3_and_below_producer_id v3_and_below_producer_epoch {v3_and_below_topics} TAG_BUFFER + v3_and_below_transactional_id => COMPACT_STRING + v3_and_below_producer_id => INT64 + v3_and_below_producer_epoch => INT16 + v3_and_below_topics => name {partitions} TAG_BUFFER name => COMPACT_STRING - partition_indexes => INT32 + partitions => INT32 -# group_id: The group to fetch offsets for. -# topics: Each topic we would like to fetch offsets for, or null to fetch offsets for all topics. -# name: The topic name. -# partition_indexes: The partition indexes we would like to fetch offsets for. +# v3_and_below_transactional_id: The transactional id corresponding to the transaction. +# v3_and_below_producer_id: Current producer id in use by the transactional id. +# v3_and_below_producer_epoch: Current epoch associated with the producer id. +# v3_and_below_topics: The partitions to add to the transaction. +# name: The name of the topic. +# partitions: The partition indexes to add to the transaction. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -OffsetFetchResponseV0 => [topics] - topics => name [partitions] - name => STRING - partitions => partition_index committed_offset metadata error_code - partition_index => INT32 - committed_offset => INT64 - metadata => NULLABLE_STRING - error_code => INT16 +AddPartitionsToTxnRequestV4 => {transactions} TAG_BUFFER + transactions => transactional_id producer_id producer_epoch verify_only {topics} TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + verify_only => BOOLEAN + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 -# topics: The responses per topic. -# name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. +# transactions: List of transactions to add partitions to. +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# verify_only: Boolean to signify if we want to check if the partition is in the transaction rather than add it. +# topics: The partitions to add to the transaction. +# name: The name of the topic. +# partitions: The partition indexes to add to the transaction. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -OffsetFetchResponseV1 => [topics] - topics => name [partitions] - name => STRING - partitions => partition_index committed_offset metadata error_code - partition_index => INT32 - committed_offset => INT64 - metadata => NULLABLE_STRING - error_code => INT16 +AddPartitionsToTxnRequestV5 => {transactions} TAG_BUFFER + transactions => transactional_id producer_id producer_epoch verify_only {topics} TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + verify_only => BOOLEAN + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 -# topics: The responses per topic. -# name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. +# transactions: List of transactions to add partitions to. +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# verify_only: Boolean to signify if we want to check if the partition is in the transaction rather than add it. +# topics: The partitions to add to the transaction. +# name: The name of the topic. +# partitions: The partition indexes to add to the transaction. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -OffsetFetchResponseV2 => [topics] error_code - topics => name [partitions] +AddPartitionsToTxnResponseV0 => throttle_time_ms [results_by_topic_v3_and_below] + throttle_time_ms => INT32 + results_by_topic_v3_and_below => name [results_by_partition] name => STRING - partitions => partition_index committed_offset metadata error_code + results_by_partition => partition_index partition_error_code partition_index => INT32 - committed_offset => INT64 - metadata => NULLABLE_STRING - error_code => INT16 - error_code => INT16 + partition_error_code => INT16 -# topics: The responses per topic. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results_by_topic_v3_and_below: The results for each topic. # name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. -# error_code: The top-level error code, or 0 if there was no error. +# results_by_partition: The results for each partition. +# partition_index: The partition indexes. +# partition_error_code: The response error code. -OffsetFetchResponseV3 => throttle_time_ms [topics] error_code +AddPartitionsToTxnResponseV1 => throttle_time_ms [results_by_topic_v3_and_below] throttle_time_ms => INT32 - topics => name [partitions] + results_by_topic_v3_and_below => name [results_by_partition] name => STRING - partitions => partition_index committed_offset metadata error_code + results_by_partition => partition_index partition_error_code partition_index => INT32 - committed_offset => INT64 - metadata => NULLABLE_STRING - error_code => INT16 - error_code => INT16 + partition_error_code => INT16 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses per topic. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results_by_topic_v3_and_below: The results for each topic. # name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. -# error_code: The top-level error code, or 0 if there was no error. +# results_by_partition: The results for each partition. +# partition_index: The partition indexes. +# partition_error_code: The response error code. -OffsetFetchResponseV4 => throttle_time_ms [topics] error_code +AddPartitionsToTxnResponseV2 => throttle_time_ms [results_by_topic_v3_and_below] throttle_time_ms => INT32 - topics => name [partitions] + results_by_topic_v3_and_below => name [results_by_partition] name => STRING - partitions => partition_index committed_offset metadata error_code + results_by_partition => partition_index partition_error_code partition_index => INT32 - committed_offset => INT64 - metadata => NULLABLE_STRING - error_code => INT16 - error_code => INT16 + partition_error_code => INT16 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses per topic. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results_by_topic_v3_and_below: The results for each topic. # name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. -# error_code: The top-level error code, or 0 if there was no error. +# results_by_partition: The results for each partition. +# partition_index: The partition indexes. +# partition_error_code: The response error code. -OffsetFetchResponseV5 => throttle_time_ms [topics] error_code +AddPartitionsToTxnResponseV3 => throttle_time_ms {results_by_topic_v3_and_below} TAG_BUFFER throttle_time_ms => INT32 - topics => name [partitions] - name => STRING - partitions => partition_index committed_offset committed_leader_epoch metadata error_code + results_by_topic_v3_and_below => name {results_by_partition} TAG_BUFFER + name => COMPACT_STRING + results_by_partition => partition_index partition_error_code TAG_BUFFER partition_index => INT32 - committed_offset => INT64 - committed_leader_epoch => INT32 - metadata => NULLABLE_STRING - error_code => INT16 + partition_error_code => INT16 + +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results_by_topic_v3_and_below: The results for each topic. +# name: The topic name. +# results_by_partition: The results for each partition. +# partition_index: The partition indexes. +# partition_error_code: The response error code. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +AddPartitionsToTxnResponseV4 => throttle_time_ms error_code {results_by_transaction} TAG_BUFFER + throttle_time_ms => INT32 error_code => INT16 + results_by_transaction => transactional_id {topic_results} TAG_BUFFER + transactional_id => COMPACT_STRING + topic_results => name {results_by_partition} TAG_BUFFER + name => COMPACT_STRING + results_by_partition => partition_index partition_error_code TAG_BUFFER + partition_index => INT32 + partition_error_code => INT16 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses per topic. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response top level error code. +# results_by_transaction: Results categorized by transactional ID. +# transactional_id: The transactional id corresponding to the transaction. +# topic_results: The results for each topic. # name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# committed_leader_epoch: The leader epoch. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. -# error_code: The top-level error code, or 0 if there was no error. +# results_by_partition: The results for each partition. +# partition_index: The partition indexes. +# partition_error_code: The response error code. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -OffsetFetchResponseV6 => throttle_time_ms {topics} error_code TAG_BUFFER +AddPartitionsToTxnResponseV5 => throttle_time_ms error_code {results_by_transaction} TAG_BUFFER throttle_time_ms => INT32 - topics => name {partitions} TAG_BUFFER - name => COMPACT_STRING - partitions => partition_index committed_offset committed_leader_epoch metadata error_code TAG_BUFFER - partition_index => INT32 - committed_offset => INT64 - committed_leader_epoch => INT32 - metadata => COMPACT_NULLABLE_STRING - error_code => INT16 error_code => INT16 + results_by_transaction => transactional_id {topic_results} TAG_BUFFER + transactional_id => COMPACT_STRING + topic_results => name {results_by_partition} TAG_BUFFER + name => COMPACT_STRING + results_by_partition => partition_index partition_error_code TAG_BUFFER + partition_index => INT32 + partition_error_code => INT16 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses per topic. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response top level error code. +# results_by_transaction: Results categorized by transactional ID. +# transactional_id: The transactional id corresponding to the transaction. +# topic_results: The results for each topic. # name: The topic name. -# partitions: The responses per partition -# partition_index: The partition index. -# committed_offset: The committed message offset. -# committed_leader_epoch: The leader epoch. -# metadata: The partition metadata. -# error_code: The error code, or 0 if there was no error. +# results_by_partition: The results for each partition. +# partition_index: The partition indexes. +# partition_error_code: The response error code. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -# error_code: The top-level error code, or 0 if there was no error. # _tagged_fields: The tagged fields -#ApiKey: FindCoordinator, 10 -FindCoordinatorRequestV0 => key - key => STRING +#ApiKey: AddOffsetsToTxn, 25 +AddOffsetsToTxnRequestV0 => transactional_id producer_id producer_epoch group_id + transactional_id => STRING + producer_id => INT64 + producer_epoch => INT16 + group_id => STRING -# key: The coordinator key. +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# group_id: The unique group identifier. -FindCoordinatorRequestV1 => key key_type - key => STRING - key_type => INT8 +AddOffsetsToTxnRequestV1 => transactional_id producer_id producer_epoch group_id + transactional_id => STRING + producer_id => INT64 + producer_epoch => INT16 + group_id => STRING -# key: The coordinator key. -# key_type: The coordinator key type. (Group, transaction, etc.) +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# group_id: The unique group identifier. -FindCoordinatorRequestV2 => key key_type - key => STRING - key_type => INT8 +AddOffsetsToTxnRequestV2 => transactional_id producer_id producer_epoch group_id + transactional_id => STRING + producer_id => INT64 + producer_epoch => INT16 + group_id => STRING -# key: The coordinator key. -# key_type: The coordinator key type. (Group, transaction, etc.) +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# group_id: The unique group identifier. -FindCoordinatorRequestV3 => key key_type TAG_BUFFER - key => COMPACT_STRING - key_type => INT8 +AddOffsetsToTxnRequestV3 => transactional_id producer_id producer_epoch group_id TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + group_id => COMPACT_STRING -# key: The coordinator key. -# key_type: The coordinator key type. (Group, transaction, etc.) +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# group_id: The unique group identifier. # _tagged_fields: The tagged fields -FindCoordinatorResponseV0 => error_code node_id host port - error_code => INT16 - node_id => INT32 - host => STRING - port => INT32 +AddOffsetsToTxnRequestV4 => transactional_id producer_id producer_epoch group_id TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + group_id => COMPACT_STRING -# error_code: The error code, or 0 if there was no error. -# node_id: The node id. -# host: The host name. -# port: The port. +# transactional_id: The transactional id corresponding to the transaction. +# producer_id: Current producer id in use by the transactional id. +# producer_epoch: Current epoch associated with the producer id. +# group_id: The unique group identifier. +# _tagged_fields: The tagged fields -FindCoordinatorResponseV1 => throttle_time_ms error_code error_message node_id host port +AddOffsetsToTxnResponseV0 => throttle_time_ms error_code throttle_time_ms => INT32 error_code => INT16 - error_message => NULLABLE_STRING - node_id => INT32 - host => STRING - port => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. -# node_id: The node id. -# host: The host name. -# port: The port. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response error code, or 0 if there was no error. -FindCoordinatorResponseV2 => throttle_time_ms error_code error_message node_id host port +AddOffsetsToTxnResponseV1 => throttle_time_ms error_code throttle_time_ms => INT32 error_code => INT16 - error_message => NULLABLE_STRING - node_id => INT32 - host => STRING - port => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. -# node_id: The node id. -# host: The host name. -# port: The port. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response error code, or 0 if there was no error. -FindCoordinatorResponseV3 => throttle_time_ms error_code error_message node_id host port TAG_BUFFER +AddOffsetsToTxnResponseV2 => throttle_time_ms error_code throttle_time_ms => INT32 error_code => INT16 - error_message => COMPACT_NULLABLE_STRING - node_id => INT32 - host => COMPACT_STRING - port => INT32 - -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. -# node_id: The node id. -# host: The host name. -# port: The port. -# _tagged_fields: The tagged fields - -#ApiKey: JoinGroup, 11 -JoinGroupRequestV0 => group_id session_timeout_ms member_id protocol_type [protocols] - group_id => STRING - session_timeout_ms => INT32 - member_id => STRING - protocol_type => STRING - protocols => name metadata - name => STRING - metadata => BYTES - -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# member_id: The member id assigned by the group coordinator. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response error code, or 0 if there was no error. -JoinGroupRequestV1 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] - group_id => STRING - session_timeout_ms => INT32 - rebalance_timeout_ms => INT32 - member_id => STRING - protocol_type => STRING - protocols => name metadata - name => STRING - metadata => BYTES +AddOffsetsToTxnResponseV3 => throttle_time_ms error_code TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. -# member_id: The member id assigned by the group coordinator. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response error code, or 0 if there was no error. +# _tagged_fields: The tagged fields -JoinGroupRequestV2 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] - group_id => STRING - session_timeout_ms => INT32 - rebalance_timeout_ms => INT32 - member_id => STRING - protocol_type => STRING - protocols => name metadata - name => STRING - metadata => BYTES +AddOffsetsToTxnResponseV4 => throttle_time_ms error_code TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. -# member_id: The member id assigned by the group coordinator. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response error code, or 0 if there was no error. +# _tagged_fields: The tagged fields -JoinGroupRequestV3 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] - group_id => STRING - session_timeout_ms => INT32 - rebalance_timeout_ms => INT32 - member_id => STRING - protocol_type => STRING - protocols => name metadata - name => STRING - metadata => BYTES +#ApiKey: EndTxn, 26 +EndTxnRequestV0 => transactional_id producer_id producer_epoch committed + transactional_id => STRING + producer_id => INT64 + producer_epoch => INT16 + committed => BOOLEAN -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. -# member_id: The member id assigned by the group coordinator. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# transactional_id: The ID of the transaction to end. +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. +# committed: True if the transaction was committed, false if it was aborted. -JoinGroupRequestV4 => group_id session_timeout_ms rebalance_timeout_ms member_id protocol_type [protocols] - group_id => STRING - session_timeout_ms => INT32 - rebalance_timeout_ms => INT32 - member_id => STRING - protocol_type => STRING - protocols => name metadata - name => STRING - metadata => BYTES +EndTxnRequestV1 => transactional_id producer_id producer_epoch committed + transactional_id => STRING + producer_id => INT64 + producer_epoch => INT16 + committed => BOOLEAN -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. -# member_id: The member id assigned by the group coordinator. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# transactional_id: The ID of the transaction to end. +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. +# committed: True if the transaction was committed, false if it was aborted. -JoinGroupRequestV5 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type [protocols] - group_id => STRING - session_timeout_ms => INT32 - rebalance_timeout_ms => INT32 - member_id => STRING - group_instance_id => NULLABLE_STRING - protocol_type => STRING - protocols => name metadata - name => STRING - metadata => BYTES +EndTxnRequestV2 => transactional_id producer_id producer_epoch committed + transactional_id => STRING + producer_id => INT64 + producer_epoch => INT16 + committed => BOOLEAN -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. -# member_id: The member id assigned by the group coordinator. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# transactional_id: The ID of the transaction to end. +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. +# committed: True if the transaction was committed, false if it was aborted. -JoinGroupRequestV6 => group_id session_timeout_ms rebalance_timeout_ms member_id group_instance_id protocol_type {protocols} TAG_BUFFER - group_id => COMPACT_STRING - session_timeout_ms => INT32 - rebalance_timeout_ms => INT32 - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING - protocol_type => COMPACT_STRING - protocols => name metadata TAG_BUFFER - name => COMPACT_STRING - metadata => COMPACT_BYTES +EndTxnRequestV3 => transactional_id producer_id producer_epoch committed TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + committed => BOOLEAN -# group_id: The group identifier. -# session_timeout_ms: The coordinator considers the consumer dead if it receives no heartbeat after this timeout in milliseconds. -# rebalance_timeout_ms: The maximum time in milliseconds that the coordinator will wait for each member to rejoin when rebalancing the group. -# member_id: The member id assigned by the group coordinator. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# protocol_type: The unique name the for class of protocols implemented by the group we want to join. -# protocols: The list of protocols that the member supports. -# name: The protocol name. -# metadata: The protocol metadata. +# transactional_id: The ID of the transaction to end. +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. +# committed: True if the transaction was committed, false if it was aborted. # _tagged_fields: The tagged fields + + +EndTxnRequestV4 => transactional_id producer_id producer_epoch committed TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + committed => BOOLEAN + +# transactional_id: The ID of the transaction to end. +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. +# committed: True if the transaction was committed, false if it was aborted. # _tagged_fields: The tagged fields -JoinGroupResponseV0 => error_code generation_id protocol_name leader member_id [members] - error_code => INT16 - generation_id => INT32 - protocol_name => STRING - leader => STRING - member_id => STRING - members => member_id metadata - member_id => STRING - metadata => BYTES +EndTxnRequestV5 => transactional_id producer_id producer_epoch committed TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 + committed => BOOLEAN -# error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# metadata: The group member metadata. +# transactional_id: The ID of the transaction to end. +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. +# committed: True if the transaction was committed, false if it was aborted. +# _tagged_fields: The tagged fields -JoinGroupResponseV1 => error_code generation_id protocol_name leader member_id [members] +EndTxnResponseV0 => throttle_time_ms error_code + throttle_time_ms => INT32 error_code => INT16 - generation_id => INT32 - protocol_name => STRING - leader => STRING - member_id => STRING - members => member_id metadata - member_id => STRING - metadata => BYTES +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# metadata: The group member metadata. -JoinGroupResponseV2 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] +EndTxnResponseV1 => throttle_time_ms error_code throttle_time_ms => INT32 error_code => INT16 - generation_id => INT32 - protocol_name => STRING - leader => STRING - member_id => STRING - members => member_id metadata - member_id => STRING - metadata => BYTES # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# metadata: The group member metadata. -JoinGroupResponseV3 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] +EndTxnResponseV2 => throttle_time_ms error_code throttle_time_ms => INT32 error_code => INT16 - generation_id => INT32 - protocol_name => STRING - leader => STRING - member_id => STRING - members => member_id metadata - member_id => STRING - metadata => BYTES # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# metadata: The group member metadata. -JoinGroupResponseV4 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] +EndTxnResponseV3 => throttle_time_ms error_code TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - generation_id => INT32 - protocol_name => STRING - leader => STRING - member_id => STRING - members => member_id metadata - member_id => STRING - metadata => BYTES # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# metadata: The group member metadata. +# _tagged_fields: The tagged fields -JoinGroupResponseV5 => throttle_time_ms error_code generation_id protocol_name leader member_id [members] +EndTxnResponseV4 => throttle_time_ms error_code TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - generation_id => INT32 - protocol_name => STRING - leader => STRING - member_id => STRING - members => member_id group_instance_id metadata - member_id => STRING - group_instance_id => NULLABLE_STRING - metadata => BYTES # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# metadata: The group member metadata. +# _tagged_fields: The tagged fields -JoinGroupResponseV6 => throttle_time_ms error_code generation_id protocol_name leader member_id {members} TAG_BUFFER +EndTxnResponseV5 => throttle_time_ms error_code producer_id producer_epoch TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - generation_id => INT32 - protocol_name => COMPACT_STRING - leader => COMPACT_STRING - member_id => COMPACT_STRING - members => member_id group_instance_id metadata TAG_BUFFER - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING - metadata => COMPACT_BYTES + producer_id => INT64 + producer_epoch => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# generation_id: The generation ID of the group. -# protocol_name: The group protocol selected by the coordinator. -# leader: The leader of the group. -# member_id: The member ID assigned by the group coordinator. -# member_id: The group member ID. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# metadata: The group member metadata. -# _tagged_fields: The tagged fields +# producer_id: The producer ID. +# producer_epoch: The current epoch associated with the producer. # _tagged_fields: The tagged fields -#ApiKey: Heartbeat, 12 -HeartbeatRequestV0 => group_id generation_id member_id +#ApiKey: TxnOffsetCommit, 28 +TxnOffsetCommitRequestV0 => transactional_id group_id producer_id producer_epoch [topics] + transactional_id => STRING group_id => STRING - generation_id => INT32 - member_id => STRING + producer_id => INT64 + producer_epoch => INT16 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_metadata => NULLABLE_STRING + +# transactional_id: The ID of the transaction. +# group_id: The ID of the group. +# producer_id: The current producer ID in use by the transactional ID. +# producer_epoch: The current epoch associated with the producer ID. +# topics: Each topic that we want to commit offsets for. +# name: The topic name. +# partitions: The partitions inside the topic that we want to commit offsets for. +# partition_index: The index of the partition within the topic. +# committed_offset: The message offset to be committed. +# committed_metadata: Any associated metadata the client wants to keep. + + +TxnOffsetCommitRequestV1 => transactional_id group_id producer_id producer_epoch [topics] + transactional_id => STRING + group_id => STRING + producer_id => INT64 + producer_epoch => INT16 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_metadata => NULLABLE_STRING -# group_id: The group id. -# generation_id: The generation of the group. -# member_id: The member ID. +# transactional_id: The ID of the transaction. +# group_id: The ID of the group. +# producer_id: The current producer ID in use by the transactional ID. +# producer_epoch: The current epoch associated with the producer ID. +# topics: Each topic that we want to commit offsets for. +# name: The topic name. +# partitions: The partitions inside the topic that we want to commit offsets for. +# partition_index: The index of the partition within the topic. +# committed_offset: The message offset to be committed. +# committed_metadata: Any associated metadata the client wants to keep. -HeartbeatRequestV1 => group_id generation_id member_id +TxnOffsetCommitRequestV2 => transactional_id group_id producer_id producer_epoch [topics] + transactional_id => STRING group_id => STRING - generation_id => INT32 - member_id => STRING + producer_id => INT64 + producer_epoch => INT16 + topics => name [partitions] + name => STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => NULLABLE_STRING -# group_id: The group id. -# generation_id: The generation of the group. -# member_id: The member ID. +# transactional_id: The ID of the transaction. +# group_id: The ID of the group. +# producer_id: The current producer ID in use by the transactional ID. +# producer_epoch: The current epoch associated with the producer ID. +# topics: Each topic that we want to commit offsets for. +# name: The topic name. +# partitions: The partitions inside the topic that we want to commit offsets for. +# partition_index: The index of the partition within the topic. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of the last consumed record. +# committed_metadata: Any associated metadata the client wants to keep. -HeartbeatRequestV2 => group_id generation_id member_id - group_id => STRING +TxnOffsetCommitRequestV3 => transactional_id group_id producer_id producer_epoch generation_id member_id group_instance_id {topics} TAG_BUFFER + transactional_id => COMPACT_STRING + group_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 generation_id => INT32 - member_id => STRING + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => COMPACT_NULLABLE_STRING -# group_id: The group id. -# generation_id: The generation of the group. -# member_id: The member ID. +# transactional_id: The ID of the transaction. +# group_id: The ID of the group. +# producer_id: The current producer ID in use by the transactional ID. +# producer_epoch: The current epoch associated with the producer ID. +# generation_id: The generation of the consumer. +# member_id: The member ID assigned by the group coordinator. +# group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: Each topic that we want to commit offsets for. +# name: The topic name. +# partitions: The partitions inside the topic that we want to commit offsets for. +# partition_index: The index of the partition within the topic. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of the last consumed record. +# committed_metadata: Any associated metadata the client wants to keep. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -HeartbeatRequestV3 => group_id generation_id member_id group_instance_id - group_id => STRING +TxnOffsetCommitRequestV4 => transactional_id group_id producer_id producer_epoch generation_id member_id group_instance_id {topics} TAG_BUFFER + transactional_id => COMPACT_STRING + group_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 generation_id => INT32 - member_id => STRING - group_instance_id => NULLABLE_STRING + member_id => COMPACT_STRING + group_instance_id => COMPACT_NULLABLE_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => COMPACT_NULLABLE_STRING -# group_id: The group id. -# generation_id: The generation of the group. -# member_id: The member ID. +# transactional_id: The ID of the transaction. +# group_id: The ID of the group. +# producer_id: The current producer ID in use by the transactional ID. +# producer_epoch: The current epoch associated with the producer ID. +# generation_id: The generation of the consumer. +# member_id: The member ID assigned by the group coordinator. # group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: Each topic that we want to commit offsets for. +# name: The topic name. +# partitions: The partitions inside the topic that we want to commit offsets for. +# partition_index: The index of the partition within the topic. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of the last consumed record. +# committed_metadata: Any associated metadata the client wants to keep. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -HeartbeatRequestV4 => group_id generation_id member_id group_instance_id TAG_BUFFER +TxnOffsetCommitRequestV5 => transactional_id group_id producer_id producer_epoch generation_id member_id group_instance_id {topics} TAG_BUFFER + transactional_id => COMPACT_STRING group_id => COMPACT_STRING + producer_id => INT64 + producer_epoch => INT16 generation_id => INT32 member_id => COMPACT_STRING group_instance_id => COMPACT_NULLABLE_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index committed_offset committed_leader_epoch committed_metadata TAG_BUFFER + partition_index => INT32 + committed_offset => INT64 + committed_leader_epoch => INT32 + committed_metadata => COMPACT_NULLABLE_STRING -# group_id: The group id. -# generation_id: The generation of the group. -# member_id: The member ID. +# transactional_id: The ID of the transaction. +# group_id: The ID of the group. +# producer_id: The current producer ID in use by the transactional ID. +# producer_epoch: The current epoch associated with the producer ID. +# generation_id: The generation of the consumer. +# member_id: The member ID assigned by the group coordinator. # group_instance_id: The unique identifier of the consumer instance provided by end user. +# topics: Each topic that we want to commit offsets for. +# name: The topic name. +# partitions: The partitions inside the topic that we want to commit offsets for. +# partition_index: The index of the partition within the topic. +# committed_offset: The message offset to be committed. +# committed_leader_epoch: The leader epoch of the last consumed record. +# committed_metadata: Any associated metadata the client wants to keep. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -HeartbeatResponseV0 => error_code - error_code => INT16 +TxnOffsetCommitResponseV0 => throttle_time_ms [topics] + throttle_time_ms => INT32 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. -HeartbeatResponseV1 => throttle_time_ms error_code +TxnOffsetCommitResponseV1 => throttle_time_ms [topics] throttle_time_ms => INT32 - error_code => INT16 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. -HeartbeatResponseV2 => throttle_time_ms error_code +TxnOffsetCommitResponseV2 => throttle_time_ms [topics] throttle_time_ms => INT32 - error_code => INT16 + topics => name [partitions] + name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. -HeartbeatResponseV3 => throttle_time_ms error_code +TxnOffsetCommitResponseV3 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -HeartbeatResponseV4 => throttle_time_ms error_code TAG_BUFFER +TxnOffsetCommitResponseV4 => throttle_time_ms {topics} TAG_BUFFER throttle_time_ms => INT32 - error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. # _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: LeaveGroup, 13 -LeaveGroupRequestV0 => group_id member_id - group_id => STRING - member_id => STRING - -# group_id: The ID of the group to leave. -# member_id: The member ID to remove from the group. - - -LeaveGroupRequestV1 => group_id member_id - group_id => STRING - member_id => STRING - -# group_id: The ID of the group to leave. -# member_id: The member ID to remove from the group. - - -LeaveGroupRequestV2 => group_id member_id - group_id => STRING - member_id => STRING - -# group_id: The ID of the group to leave. -# member_id: The member ID to remove from the group. - - -LeaveGroupRequestV3 => group_id [members] - group_id => STRING - members => member_id group_instance_id - member_id => STRING - group_instance_id => NULLABLE_STRING - -# group_id: The ID of the group to leave. -# members: List of leaving member identities. -# member_id: The member ID to remove from the group. -# group_instance_id: The group instance ID to remove from the group. - - -LeaveGroupRequestV4 => group_id {members} TAG_BUFFER - group_id => COMPACT_STRING - members => member_id group_instance_id TAG_BUFFER - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING +TxnOffsetCommitResponseV5 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 -# group_id: The ID of the group to leave. -# members: List of leaving member identities. -# member_id: The member ID to remove from the group. -# group_instance_id: The group instance ID to remove from the group. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: The responses for each topic. +# name: The topic name. +# partitions: The responses for each partition in the topic. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -LeaveGroupResponseV0 => error_code - error_code => INT16 +#ApiKey: DescribeAcls, 29 +DescribeAclsRequestV1 => resource_type_filter resource_name_filter pattern_type_filter principal_filter host_filter operation permission_type + resource_type_filter => INT8 + resource_name_filter => NULLABLE_STRING + pattern_type_filter => INT8 + principal_filter => NULLABLE_STRING + host_filter => NULLABLE_STRING + operation => INT8 + permission_type => INT8 -# error_code: The error code, or 0 if there was no error. +# resource_type_filter: The resource type. +# resource_name_filter: The resource name, or null to match any resource name. +# pattern_type_filter: The resource pattern to match. +# principal_filter: The principal to match, or null to match any principal. +# host_filter: The host to match, or null to match any host. +# operation: The operation to match. +# permission_type: The permission type to match. + + +DescribeAclsRequestV2 => resource_type_filter resource_name_filter pattern_type_filter principal_filter host_filter operation permission_type TAG_BUFFER + resource_type_filter => INT8 + resource_name_filter => COMPACT_NULLABLE_STRING + pattern_type_filter => INT8 + principal_filter => COMPACT_NULLABLE_STRING + host_filter => COMPACT_NULLABLE_STRING + operation => INT8 + permission_type => INT8 +# resource_type_filter: The resource type. +# resource_name_filter: The resource name, or null to match any resource name. +# pattern_type_filter: The resource pattern to match. +# principal_filter: The principal to match, or null to match any principal. +# host_filter: The host to match, or null to match any host. +# operation: The operation to match. +# permission_type: The permission type to match. +# _tagged_fields: The tagged fields -LeaveGroupResponseV1 => throttle_time_ms error_code - throttle_time_ms => INT32 - error_code => INT16 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. +DescribeAclsRequestV3 => resource_type_filter resource_name_filter pattern_type_filter principal_filter host_filter operation permission_type TAG_BUFFER + resource_type_filter => INT8 + resource_name_filter => COMPACT_NULLABLE_STRING + pattern_type_filter => INT8 + principal_filter => COMPACT_NULLABLE_STRING + host_filter => COMPACT_NULLABLE_STRING + operation => INT8 + permission_type => INT8 +# resource_type_filter: The resource type. +# resource_name_filter: The resource name, or null to match any resource name. +# pattern_type_filter: The resource pattern to match. +# principal_filter: The principal to match, or null to match any principal. +# host_filter: The host to match, or null to match any host. +# operation: The operation to match. +# permission_type: The permission type to match. +# _tagged_fields: The tagged fields -LeaveGroupResponseV2 => throttle_time_ms error_code + + + +DescribeAclsResponseV1 => throttle_time_ms error_code error_message [resources] throttle_time_ms => INT32 error_code => INT16 + error_message => NULLABLE_STRING + resources => resource_type resource_name pattern_type [acls] + resource_type => INT8 + resource_name => STRING + pattern_type => INT8 + acls => principal host operation permission_type + principal => STRING + host => STRING + operation => INT8 + permission_type => INT8 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# resources: Each Resource that is referenced in an ACL. +# resource_type: The resource type. +# resource_name: The resource name. +# pattern_type: The resource pattern type. +# acls: The ACLs. +# principal: The ACL principal. +# host: The ACL host. +# operation: The ACL operation. +# permission_type: The ACL permission type. -LeaveGroupResponseV3 => throttle_time_ms error_code [members] +DescribeAclsResponseV2 => throttle_time_ms error_code error_message {resources} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - members => member_id group_instance_id error_code - member_id => STRING - group_instance_id => NULLABLE_STRING - error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resources => resource_type resource_name pattern_type {acls} TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + pattern_type => INT8 + acls => principal host operation permission_type TAG_BUFFER + principal => COMPACT_STRING + host => COMPACT_STRING + operation => INT8 + permission_type => INT8 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# members: List of leaving member responses. -# member_id: The member ID to remove from the group. -# group_instance_id: The group instance ID to remove from the group. -# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# resources: Each Resource that is referenced in an ACL. +# resource_type: The resource type. +# resource_name: The resource name. +# pattern_type: The resource pattern type. +# acls: The ACLs. +# principal: The ACL principal. +# host: The ACL host. +# operation: The ACL operation. +# permission_type: The ACL permission type. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -LeaveGroupResponseV4 => throttle_time_ms error_code {members} TAG_BUFFER +DescribeAclsResponseV3 => throttle_time_ms error_code error_message {resources} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - members => member_id group_instance_id error_code TAG_BUFFER - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING - error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resources => resource_type resource_name pattern_type {acls} TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + pattern_type => INT8 + acls => principal host operation permission_type TAG_BUFFER + principal => COMPACT_STRING + host => COMPACT_STRING + operation => INT8 + permission_type => INT8 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# members: List of leaving member responses. -# member_id: The member ID to remove from the group. -# group_instance_id: The group instance ID to remove from the group. -# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# resources: Each Resource that is referenced in an ACL. +# resource_type: The resource type. +# resource_name: The resource name. +# pattern_type: The resource pattern type. +# acls: The ACLs. +# principal: The ACL principal. +# host: The ACL host. +# operation: The ACL operation. +# permission_type: The ACL permission type. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: SyncGroup, 14 -SyncGroupRequestV0 => group_id generation_id member_id [assignments] - group_id => STRING - generation_id => INT32 - member_id => STRING - assignments => member_id assignment - member_id => STRING - assignment => BYTES - -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group. -# assignments: Each assignment. -# member_id: The ID of the member to assign. -# assignment: The member assignment. - - -SyncGroupRequestV1 => group_id generation_id member_id [assignments] - group_id => STRING - generation_id => INT32 - member_id => STRING - assignments => member_id assignment - member_id => STRING - assignment => BYTES - -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group. -# assignments: Each assignment. -# member_id: The ID of the member to assign. -# assignment: The member assignment. - - -SyncGroupRequestV2 => group_id generation_id member_id [assignments] - group_id => STRING - generation_id => INT32 - member_id => STRING - assignments => member_id assignment - member_id => STRING - assignment => BYTES +#ApiKey: CreateAcls, 30 +CreateAclsRequestV1 => [creations] + creations => resource_type resource_name resource_pattern_type principal host operation permission_type + resource_type => INT8 + resource_name => STRING + resource_pattern_type => INT8 + principal => STRING + host => STRING + operation => INT8 + permission_type => INT8 -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group. -# assignments: Each assignment. -# member_id: The ID of the member to assign. -# assignment: The member assignment. +# creations: The ACLs that we want to create. +# resource_type: The type of the resource. +# resource_name: The resource name for the ACL. +# resource_pattern_type: The pattern type for the ACL. +# principal: The principal for the ACL. +# host: The host for the ACL. +# operation: The operation type for the ACL (read, write, etc.). +# permission_type: The permission type for the ACL (allow, deny, etc.). -SyncGroupRequestV3 => group_id generation_id member_id group_instance_id [assignments] - group_id => STRING - generation_id => INT32 - member_id => STRING - group_instance_id => NULLABLE_STRING - assignments => member_id assignment - member_id => STRING - assignment => BYTES +CreateAclsRequestV2 => {creations} TAG_BUFFER + creations => resource_type resource_name resource_pattern_type principal host operation permission_type TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + resource_pattern_type => INT8 + principal => COMPACT_STRING + host => COMPACT_STRING + operation => INT8 + permission_type => INT8 -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# assignments: Each assignment. -# member_id: The ID of the member to assign. -# assignment: The member assignment. +# creations: The ACLs that we want to create. +# resource_type: The type of the resource. +# resource_name: The resource name for the ACL. +# resource_pattern_type: The pattern type for the ACL. +# principal: The principal for the ACL. +# host: The host for the ACL. +# operation: The operation type for the ACL (read, write, etc.). +# permission_type: The permission type for the ACL (allow, deny, etc.). +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SyncGroupRequestV4 => group_id generation_id member_id group_instance_id {assignments} TAG_BUFFER - group_id => COMPACT_STRING - generation_id => INT32 - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING - assignments => member_id assignment TAG_BUFFER - member_id => COMPACT_STRING - assignment => COMPACT_BYTES +CreateAclsRequestV3 => {creations} TAG_BUFFER + creations => resource_type resource_name resource_pattern_type principal host operation permission_type TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + resource_pattern_type => INT8 + principal => COMPACT_STRING + host => COMPACT_STRING + operation => INT8 + permission_type => INT8 -# group_id: The unique group identifier. -# generation_id: The generation of the group. -# member_id: The member ID assigned by the group. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# assignments: Each assignment. -# member_id: The ID of the member to assign. -# assignment: The member assignment. +# creations: The ACLs that we want to create. +# resource_type: The type of the resource. +# resource_name: The resource name for the ACL. +# resource_pattern_type: The pattern type for the ACL. +# principal: The principal for the ACL. +# host: The host for the ACL. +# operation: The operation type for the ACL (read, write, etc.). +# permission_type: The permission type for the ACL (allow, deny, etc.). # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -SyncGroupResponseV0 => error_code assignment - error_code => INT16 - assignment => BYTES - -# error_code: The error code, or 0 if there was no error. -# assignment: The member assignment. -SyncGroupResponseV1 => throttle_time_ms error_code assignment +CreateAclsResponseV1 => throttle_time_ms [results] throttle_time_ms => INT32 - error_code => INT16 - assignment => BYTES + results => error_code error_message + error_code => INT16 + error_message => NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# assignment: The member assignment. +# results: The results for each ACL creation. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. -SyncGroupResponseV2 => throttle_time_ms error_code assignment +CreateAclsResponseV2 => throttle_time_ms {results} TAG_BUFFER throttle_time_ms => INT32 - error_code => INT16 - assignment => BYTES + results => error_code error_message TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# assignment: The member assignment. +# results: The results for each ACL creation. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SyncGroupResponseV3 => throttle_time_ms error_code assignment +CreateAclsResponseV3 => throttle_time_ms {results} TAG_BUFFER throttle_time_ms => INT32 - error_code => INT16 - assignment => BYTES + results => error_code error_message TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# assignment: The member assignment. +# results: The results for each ACL creation. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SyncGroupResponseV4 => throttle_time_ms error_code assignment TAG_BUFFER - throttle_time_ms => INT32 - error_code => INT16 - assignment => COMPACT_BYTES +#ApiKey: DeleteAcls, 31 +DeleteAclsRequestV1 => [filters] + filters => resource_type_filter resource_name_filter pattern_type_filter principal_filter host_filter operation permission_type + resource_type_filter => INT8 + resource_name_filter => NULLABLE_STRING + pattern_type_filter => INT8 + principal_filter => NULLABLE_STRING + host_filter => NULLABLE_STRING + operation => INT8 + permission_type => INT8 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# assignment: The member assignment. +# filters: The filters to use when deleting ACLs. +# resource_type_filter: The resource type. +# resource_name_filter: The resource name. +# pattern_type_filter: The pattern type. +# principal_filter: The principal filter, or null to accept all principals. +# host_filter: The host filter, or null to accept all hosts. +# operation: The ACL operation. +# permission_type: The permission type. + + +DeleteAclsRequestV2 => {filters} TAG_BUFFER + filters => resource_type_filter resource_name_filter pattern_type_filter principal_filter host_filter operation permission_type TAG_BUFFER + resource_type_filter => INT8 + resource_name_filter => COMPACT_NULLABLE_STRING + pattern_type_filter => INT8 + principal_filter => COMPACT_NULLABLE_STRING + host_filter => COMPACT_NULLABLE_STRING + operation => INT8 + permission_type => INT8 + +# filters: The filters to use when deleting ACLs. +# resource_type_filter: The resource type. +# resource_name_filter: The resource name. +# pattern_type_filter: The pattern type. +# principal_filter: The principal filter, or null to accept all principals. +# host_filter: The host filter, or null to accept all hosts. +# operation: The ACL operation. +# permission_type: The permission type. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: DescribeGroups, 15 -DescribeGroupsRequestV0 => [groups] - groups => STRING +DeleteAclsRequestV3 => {filters} TAG_BUFFER + filters => resource_type_filter resource_name_filter pattern_type_filter principal_filter host_filter operation permission_type TAG_BUFFER + resource_type_filter => INT8 + resource_name_filter => COMPACT_NULLABLE_STRING + pattern_type_filter => INT8 + principal_filter => COMPACT_NULLABLE_STRING + host_filter => COMPACT_NULLABLE_STRING + operation => INT8 + permission_type => INT8 + +# filters: The filters to use when deleting ACLs. +# resource_type_filter: The resource type. +# resource_name_filter: The resource name. +# pattern_type_filter: The pattern type. +# principal_filter: The principal filter, or null to accept all principals. +# host_filter: The host filter, or null to accept all hosts. +# operation: The ACL operation. +# permission_type: The permission type. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + + + +DeleteAclsResponseV1 => throttle_time_ms [filter_results] + throttle_time_ms => INT32 + filter_results => error_code error_message [matching_acls] + error_code => INT16 + error_message => NULLABLE_STRING + matching_acls => error_code error_message resource_type resource_name pattern_type principal host operation permission_type + error_code => INT16 + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING + pattern_type => INT8 + principal => STRING + host => STRING + operation => INT8 + permission_type => INT8 + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# filter_results: The results for each filter. +# error_code: The error code, or 0 if the filter succeeded. +# error_message: The error message, or null if the filter succeeded. +# matching_acls: The ACLs which matched this filter. +# error_code: The deletion error code, or 0 if the deletion succeeded. +# error_message: The deletion error message, or null if the deletion succeeded. +# resource_type: The ACL resource type. +# resource_name: The ACL resource name. +# pattern_type: The ACL resource pattern type. +# principal: The ACL principal. +# host: The ACL host. +# operation: The ACL operation. +# permission_type: The ACL permission type. + + +DeleteAclsResponseV2 => throttle_time_ms {filter_results} TAG_BUFFER + throttle_time_ms => INT32 + filter_results => error_code error_message {matching_acls} TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + matching_acls => error_code error_message resource_type resource_name pattern_type principal host operation permission_type TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resource_type => INT8 + resource_name => COMPACT_STRING + pattern_type => INT8 + principal => COMPACT_STRING + host => COMPACT_STRING + operation => INT8 + permission_type => INT8 -# groups: The names of the groups to describe +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# filter_results: The results for each filter. +# error_code: The error code, or 0 if the filter succeeded. +# error_message: The error message, or null if the filter succeeded. +# matching_acls: The ACLs which matched this filter. +# error_code: The deletion error code, or 0 if the deletion succeeded. +# error_message: The deletion error message, or null if the deletion succeeded. +# resource_type: The ACL resource type. +# resource_name: The ACL resource name. +# pattern_type: The ACL resource pattern type. +# principal: The ACL principal. +# host: The ACL host. +# operation: The ACL operation. +# permission_type: The ACL permission type. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DescribeGroupsRequestV1 => [groups] - groups => STRING +DeleteAclsResponseV3 => throttle_time_ms {filter_results} TAG_BUFFER + throttle_time_ms => INT32 + filter_results => error_code error_message {matching_acls} TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + matching_acls => error_code error_message resource_type resource_name pattern_type principal host operation permission_type TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resource_type => INT8 + resource_name => COMPACT_STRING + pattern_type => INT8 + principal => COMPACT_STRING + host => COMPACT_STRING + operation => INT8 + permission_type => INT8 -# groups: The names of the groups to describe +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# filter_results: The results for each filter. +# error_code: The error code, or 0 if the filter succeeded. +# error_message: The error message, or null if the filter succeeded. +# matching_acls: The ACLs which matched this filter. +# error_code: The deletion error code, or 0 if the deletion succeeded. +# error_message: The deletion error message, or null if the deletion succeeded. +# resource_type: The ACL resource type. +# resource_name: The ACL resource name. +# pattern_type: The ACL resource pattern type. +# principal: The ACL principal. +# host: The ACL host. +# operation: The ACL operation. +# permission_type: The ACL permission type. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DescribeGroupsRequestV2 => [groups] - groups => STRING +#ApiKey: DescribeConfigs, 32 +DescribeConfigsRequestV1 => [resources] include_synonyms + resources => resource_type resource_name [configuration_keys] + resource_type => INT8 + resource_name => STRING + configuration_keys => STRING + include_synonyms => BOOLEAN -# groups: The names of the groups to describe +# resources: The resources whose configurations we want to describe. +# resource_type: The resource type. +# resource_name: The resource name. +# configuration_keys: The configuration keys to list, or null to list all configuration keys. +# include_synonyms: True if we should include all synonyms. -DescribeGroupsRequestV3 => [groups] include_authorized_operations - groups => STRING - include_authorized_operations => BOOLEAN +DescribeConfigsRequestV2 => [resources] include_synonyms + resources => resource_type resource_name [configuration_keys] + resource_type => INT8 + resource_name => STRING + configuration_keys => STRING + include_synonyms => BOOLEAN -# groups: The names of the groups to describe -# include_authorized_operations: Whether to include authorized operations. +# resources: The resources whose configurations we want to describe. +# resource_type: The resource type. +# resource_name: The resource name. +# configuration_keys: The configuration keys to list, or null to list all configuration keys. +# include_synonyms: True if we should include all synonyms. -DescribeGroupsRequestV4 => [groups] include_authorized_operations - groups => STRING - include_authorized_operations => BOOLEAN +DescribeConfigsRequestV3 => [resources] include_synonyms include_documentation + resources => resource_type resource_name [configuration_keys] + resource_type => INT8 + resource_name => STRING + configuration_keys => STRING + include_synonyms => BOOLEAN + include_documentation => BOOLEAN -# groups: The names of the groups to describe -# include_authorized_operations: Whether to include authorized operations. +# resources: The resources whose configurations we want to describe. +# resource_type: The resource type. +# resource_name: The resource name. +# configuration_keys: The configuration keys to list, or null to list all configuration keys. +# include_synonyms: True if we should include all synonyms. +# include_documentation: True if we should include configuration documentation. -DescribeGroupsRequestV5 => {groups} include_authorized_operations TAG_BUFFER - groups => COMPACT_STRING - include_authorized_operations => BOOLEAN +DescribeConfigsRequestV4 => {resources} include_synonyms include_documentation TAG_BUFFER + resources => resource_type resource_name {configuration_keys} TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + configuration_keys => COMPACT_STRING + include_synonyms => BOOLEAN + include_documentation => BOOLEAN -# groups: The names of the groups to describe -# include_authorized_operations: Whether to include authorized operations. +# resources: The resources whose configurations we want to describe. +# resource_type: The resource type. +# resource_name: The resource name. +# configuration_keys: The configuration keys to list, or null to list all configuration keys. +# _tagged_fields: The tagged fields +# include_synonyms: True if we should include all synonyms. +# include_documentation: True if we should include configuration documentation. # _tagged_fields: The tagged fields -DescribeGroupsResponseV0 => [groups] - groups => error_code group_id group_state protocol_type protocol_data [members] - error_code => INT16 - group_id => STRING - group_state => STRING - protocol_type => STRING - protocol_data => STRING - members => member_id client_id client_host member_metadata member_assignment - member_id => STRING - client_id => STRING - client_host => STRING - member_metadata => BYTES - member_assignment => BYTES - -# groups: Each described group. -# error_code: The describe error, or 0 if there was no error. -# group_id: The group ID string. -# group_state: The group state string, or the empty string. -# protocol_type: The group protocol type, or the empty string. -# protocol_data: The group protocol data, or the empty string. -# members: The group members. -# member_id: The member ID assigned by the group coordinator. -# client_id: The client ID used in the member's latest join group request. -# client_host: The client host. -# member_metadata: The metadata corresponding to the current group protocol in use. -# member_assignment: The current assignment provided by the group leader. - - -DescribeGroupsResponseV1 => throttle_time_ms [groups] - throttle_time_ms => INT32 - groups => error_code group_id group_state protocol_type protocol_data [members] - error_code => INT16 - group_id => STRING - group_state => STRING - protocol_type => STRING - protocol_data => STRING - members => member_id client_id client_host member_metadata member_assignment - member_id => STRING - client_id => STRING - client_host => STRING - member_metadata => BYTES - member_assignment => BYTES - -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# groups: Each described group. -# error_code: The describe error, or 0 if there was no error. -# group_id: The group ID string. -# group_state: The group state string, or the empty string. -# protocol_type: The group protocol type, or the empty string. -# protocol_data: The group protocol data, or the empty string. -# members: The group members. -# member_id: The member ID assigned by the group coordinator. -# client_id: The client ID used in the member's latest join group request. -# client_host: The client host. -# member_metadata: The metadata corresponding to the current group protocol in use. -# member_assignment: The current assignment provided by the group leader. -DescribeGroupsResponseV2 => throttle_time_ms [groups] +DescribeConfigsResponseV1 => throttle_time_ms [results] throttle_time_ms => INT32 - groups => error_code group_id group_state protocol_type protocol_data [members] + results => error_code error_message resource_type resource_name [configs] error_code => INT16 - group_id => STRING - group_state => STRING - protocol_type => STRING - protocol_data => STRING - members => member_id client_id client_host member_metadata member_assignment - member_id => STRING - client_id => STRING - client_host => STRING - member_metadata => BYTES - member_assignment => BYTES + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING + configs => name value read_only config_source is_sensitive [synonyms] + name => STRING + value => NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + synonyms => name value source + name => STRING + value => NULLABLE_STRING + source => INT8 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# groups: Each described group. -# error_code: The describe error, or 0 if there was no error. -# group_id: The group ID string. -# group_state: The group state string, or the empty string. -# protocol_type: The group protocol type, or the empty string. -# protocol_data: The group protocol data, or the empty string. -# members: The group members. -# member_id: The member ID assigned by the group coordinator. -# client_id: The client ID used in the member's latest join group request. -# client_host: The client host. -# member_metadata: The metadata corresponding to the current group protocol in use. -# member_assignment: The current assignment provided by the group leader. +# results: The results for each resource. +# error_code: The error code, or 0 if we were able to successfully describe the configurations. +# error_message: The error message, or null if we were able to successfully describe the configurations. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: Each listed configuration. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# synonyms: The synonyms for this configuration key. +# name: The synonym name. +# value: The synonym value. +# source: The synonym source. -DescribeGroupsResponseV3 => throttle_time_ms [groups] +DescribeConfigsResponseV2 => throttle_time_ms [results] throttle_time_ms => INT32 - groups => error_code group_id group_state protocol_type protocol_data [members] authorized_operations + results => error_code error_message resource_type resource_name [configs] error_code => INT16 - group_id => STRING - group_state => STRING - protocol_type => STRING - protocol_data => STRING - members => member_id client_id client_host member_metadata member_assignment - member_id => STRING - client_id => STRING - client_host => STRING - member_metadata => BYTES - member_assignment => BYTES - authorized_operations => INT32 + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING + configs => name value read_only config_source is_sensitive [synonyms] + name => STRING + value => NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + synonyms => name value source + name => STRING + value => NULLABLE_STRING + source => INT8 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# groups: Each described group. -# error_code: The describe error, or 0 if there was no error. -# group_id: The group ID string. -# group_state: The group state string, or the empty string. -# protocol_type: The group protocol type, or the empty string. -# protocol_data: The group protocol data, or the empty string. -# members: The group members. -# member_id: The member ID assigned by the group coordinator. -# client_id: The client ID used in the member's latest join group request. -# client_host: The client host. -# member_metadata: The metadata corresponding to the current group protocol in use. -# member_assignment: The current assignment provided by the group leader. -# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# results: The results for each resource. +# error_code: The error code, or 0 if we were able to successfully describe the configurations. +# error_message: The error message, or null if we were able to successfully describe the configurations. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: Each listed configuration. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# synonyms: The synonyms for this configuration key. +# name: The synonym name. +# value: The synonym value. +# source: The synonym source. -DescribeGroupsResponseV4 => throttle_time_ms [groups] +DescribeConfigsResponseV3 => throttle_time_ms [results] throttle_time_ms => INT32 - groups => error_code group_id group_state protocol_type protocol_data [members] authorized_operations + results => error_code error_message resource_type resource_name [configs] error_code => INT16 - group_id => STRING - group_state => STRING - protocol_type => STRING - protocol_data => STRING - members => member_id group_instance_id client_id client_host member_metadata member_assignment - member_id => STRING - group_instance_id => NULLABLE_STRING - client_id => STRING - client_host => STRING - member_metadata => BYTES - member_assignment => BYTES - authorized_operations => INT32 + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING + configs => name value read_only config_source is_sensitive [synonyms] config_type documentation + name => STRING + value => NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + synonyms => name value source + name => STRING + value => NULLABLE_STRING + source => INT8 + config_type => INT8 + documentation => NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# groups: Each described group. -# error_code: The describe error, or 0 if there was no error. -# group_id: The group ID string. -# group_state: The group state string, or the empty string. -# protocol_type: The group protocol type, or the empty string. -# protocol_data: The group protocol data, or the empty string. -# members: The group members. -# member_id: The member ID assigned by the group coordinator. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# client_id: The client ID used in the member's latest join group request. -# client_host: The client host. -# member_metadata: The metadata corresponding to the current group protocol in use. -# member_assignment: The current assignment provided by the group leader. -# authorized_operations: 32-bit bitfield to represent authorized operations for this group. - - -DescribeGroupsResponseV5 => throttle_time_ms {groups} TAG_BUFFER - throttle_time_ms => INT32 - groups => error_code group_id group_state protocol_type protocol_data {members} authorized_operations TAG_BUFFER - error_code => INT16 - group_id => COMPACT_STRING - group_state => COMPACT_STRING - protocol_type => COMPACT_STRING - protocol_data => COMPACT_STRING - members => member_id group_instance_id client_id client_host member_metadata member_assignment TAG_BUFFER - member_id => COMPACT_STRING - group_instance_id => COMPACT_NULLABLE_STRING - client_id => COMPACT_STRING - client_host => COMPACT_STRING - member_metadata => COMPACT_BYTES - member_assignment => COMPACT_BYTES - authorized_operations => INT32 +# results: The results for each resource. +# error_code: The error code, or 0 if we were able to successfully describe the configurations. +# error_message: The error message, or null if we were able to successfully describe the configurations. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: Each listed configuration. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# synonyms: The synonyms for this configuration key. +# name: The synonym name. +# value: The synonym value. +# source: The synonym source. +# config_type: The configuration data type. Type can be one of the following values - BOOLEAN, STRING, INT, SHORT, LONG, DOUBLE, LIST, CLASS, PASSWORD. +# documentation: The configuration documentation. + + +DescribeConfigsResponseV4 => throttle_time_ms {results} TAG_BUFFER + throttle_time_ms => INT32 + results => error_code error_message resource_type resource_name {configs} TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resource_type => INT8 + resource_name => COMPACT_STRING + configs => name value read_only config_source is_sensitive {synonyms} config_type documentation TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + read_only => BOOLEAN + config_source => INT8 + is_sensitive => BOOLEAN + synonyms => name value source TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + source => INT8 + config_type => INT8 + documentation => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# groups: Each described group. -# error_code: The describe error, or 0 if there was no error. -# group_id: The group ID string. -# group_state: The group state string, or the empty string. -# protocol_type: The group protocol type, or the empty string. -# protocol_data: The group protocol data, or the empty string. -# members: The group members. -# member_id: The member ID assigned by the group coordinator. -# group_instance_id: The unique identifier of the consumer instance provided by end user. -# client_id: The client ID used in the member's latest join group request. -# client_host: The client host. -# member_metadata: The metadata corresponding to the current group protocol in use. -# member_assignment: The current assignment provided by the group leader. +# results: The results for each resource. +# error_code: The error code, or 0 if we were able to successfully describe the configurations. +# error_message: The error message, or null if we were able to successfully describe the configurations. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: Each listed configuration. +# name: The configuration name. +# value: The configuration value. +# read_only: True if the configuration is read-only. +# config_source: The configuration source. +# is_sensitive: True if this configuration is sensitive. +# synonyms: The synonyms for this configuration key. +# name: The synonym name. +# value: The synonym value. +# source: The synonym source. +# _tagged_fields: The tagged fields +# config_type: The configuration data type. Type can be one of the following values - BOOLEAN, STRING, INT, SHORT, LONG, DOUBLE, LIST, CLASS, PASSWORD. +# documentation: The configuration documentation. # _tagged_fields: The tagged fields -# authorized_operations: 32-bit bitfield to represent authorized operations for this group. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: ListGroups, 16 -ListGroupsRequestV0 => +#ApiKey: AlterConfigs, 33 +AlterConfigsRequestV0 => [resources] validate_only + resources => resource_type resource_name [configs] + resource_type => INT8 + resource_name => STRING + configs => name value + name => STRING + value => NULLABLE_STRING + validate_only => BOOLEAN +# resources: The updates for each resource. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: The configurations. +# name: The configuration key name. +# value: The value to set for the configuration key. +# validate_only: True if we should validate the request, but not change the configurations. -ListGroupsRequestV1 => +AlterConfigsRequestV1 => [resources] validate_only + resources => resource_type resource_name [configs] + resource_type => INT8 + resource_name => STRING + configs => name value + name => STRING + value => NULLABLE_STRING + validate_only => BOOLEAN +# resources: The updates for each resource. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: The configurations. +# name: The configuration key name. +# value: The value to set for the configuration key. +# validate_only: True if we should validate the request, but not change the configurations. -ListGroupsRequestV2 => +AlterConfigsRequestV2 => {resources} validate_only TAG_BUFFER + resources => resource_type resource_name {configs} TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + configs => name value TAG_BUFFER + name => COMPACT_STRING + value => COMPACT_NULLABLE_STRING + validate_only => BOOLEAN +# resources: The updates for each resource. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: The configurations. +# name: The configuration key name. +# value: The value to set for the configuration key. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# validate_only: True if we should validate the request, but not change the configurations. +# _tagged_fields: The tagged fields -ListGroupsRequestV3 => TAG_BUFFER +AlterConfigsResponseV0 => throttle_time_ms [responses] + throttle_time_ms => INT32 + responses => error_code error_message resource_type resource_name + error_code => INT16 + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING -# _tagged_fields: The tagged fields +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The responses for each resource. +# error_code: The resource error code. +# error_message: The resource error message, or null if there was no error. +# resource_type: The resource type. +# resource_name: The resource name. -ListGroupsResponseV0 => error_code [groups] - error_code => INT16 - groups => group_id protocol_type - group_id => STRING - protocol_type => STRING +AlterConfigsResponseV1 => throttle_time_ms [responses] + throttle_time_ms => INT32 + responses => error_code error_message resource_type resource_name + error_code => INT16 + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING -# error_code: The error code, or 0 if there was no error. -# groups: Each group in the response. -# group_id: The group ID. -# protocol_type: The group protocol type. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The responses for each resource. +# error_code: The resource error code. +# error_message: The resource error message, or null if there was no error. +# resource_type: The resource type. +# resource_name: The resource name. -ListGroupsResponseV1 => throttle_time_ms error_code [groups] +AlterConfigsResponseV2 => throttle_time_ms {responses} TAG_BUFFER throttle_time_ms => INT32 - error_code => INT16 - groups => group_id protocol_type - group_id => STRING - protocol_type => STRING + responses => error_code error_message resource_type resource_name TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resource_type => INT8 + resource_name => COMPACT_STRING -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# groups: Each group in the response. -# group_id: The group ID. -# protocol_type: The group protocol type. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The responses for each resource. +# error_code: The resource error code. +# error_message: The resource error message, or null if there was no error. +# resource_type: The resource type. +# resource_name: The resource name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ListGroupsResponseV2 => throttle_time_ms error_code [groups] - throttle_time_ms => INT32 - error_code => INT16 - groups => group_id protocol_type - group_id => STRING - protocol_type => STRING +#ApiKey: AlterReplicaLogDirs, 34 +AlterReplicaLogDirsRequestV1 => [dirs] + dirs => path [topics] + path => STRING + topics => name [partitions] + name => STRING + partitions => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# groups: Each group in the response. -# group_id: The group ID. -# protocol_type: The group protocol type. +# dirs: The alterations to make for each directory. +# path: The absolute directory path. +# topics: The topics to add to the directory. +# name: The topic name. +# partitions: The partition indexes. -ListGroupsResponseV3 => throttle_time_ms error_code {groups} TAG_BUFFER - throttle_time_ms => INT32 - error_code => INT16 - groups => group_id protocol_type TAG_BUFFER - group_id => COMPACT_STRING - protocol_type => COMPACT_STRING +AlterReplicaLogDirsRequestV2 => {dirs} TAG_BUFFER + dirs => path {topics} TAG_BUFFER + path => COMPACT_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# groups: Each group in the response. -# group_id: The group ID. -# protocol_type: The group protocol type. +# dirs: The alterations to make for each directory. +# path: The absolute directory path. +# topics: The topics to add to the directory. +# name: The topic name. +# partitions: The partition indexes. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: SaslHandshake, 17 -SaslHandshakeRequestV0 => mechanism - mechanism => STRING - -# mechanism: The SASL mechanism chosen by the client. -SaslHandshakeRequestV1 => mechanism - mechanism => STRING +AlterReplicaLogDirsResponseV1 => throttle_time_ms [results] + throttle_time_ms => INT32 + results => topic_name [partitions] + topic_name => STRING + partitions => partition_index error_code + partition_index => INT32 + error_code => INT16 -# mechanism: The SASL mechanism chosen by the client. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The results for each topic. +# topic_name: The name of the topic. +# partitions: The results for each partition. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. -SaslHandshakeResponseV0 => error_code [mechanisms] - error_code => INT16 - mechanisms => STRING +AlterReplicaLogDirsResponseV2 => throttle_time_ms {results} TAG_BUFFER + throttle_time_ms => INT32 + results => topic_name {partitions} TAG_BUFFER + topic_name => COMPACT_STRING + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The results for each topic. +# topic_name: The name of the topic. +# partitions: The results for each partition. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. -# mechanisms: The mechanisms enabled in the server. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SaslHandshakeResponseV1 => error_code [mechanisms] - error_code => INT16 - mechanisms => STRING +#ApiKey: DescribeLogDirs, 35 +DescribeLogDirsRequestV1 => [topics] + topics => topic [partitions] + topic => STRING + partitions => INT32 -# error_code: The error code, or 0 if there was no error. -# mechanisms: The mechanisms enabled in the server. +# topics: Each topic that we want to describe log directories for, or null for all topics. +# topic: The topic name. +# partitions: The partition indexes. -#ApiKey: ApiVersions, 18 -ApiVersionsRequestV0 => +DescribeLogDirsRequestV2 => {topics} TAG_BUFFER + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => INT32 +# topics: Each topic that we want to describe log directories for, or null for all topics. +# topic: The topic name. +# partitions: The partition indexes. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ApiVersionsRequestV1 => +DescribeLogDirsRequestV3 => {topics} TAG_BUFFER + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => INT32 + +# topics: Each topic that we want to describe log directories for, or null for all topics. +# topic: The topic name. +# partitions: The partition indexes. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +DescribeLogDirsRequestV4 => {topics} TAG_BUFFER + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => INT32 -ApiVersionsRequestV2 => +# topics: Each topic that we want to describe log directories for, or null for all topics. +# topic: The topic name. +# partitions: The partition indexes. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ApiVersionsRequestV3 => client_software_name client_software_version TAG_BUFFER - client_software_name => COMPACT_STRING - client_software_version => COMPACT_STRING -# client_software_name: The name of the client. -# client_software_version: The version of the client. +DescribeLogDirsResponseV1 => throttle_time_ms [results] + throttle_time_ms => INT32 + results => error_code log_dir [topics] + error_code => INT16 + log_dir => STRING + topics => name [partitions] + name => STRING + partitions => partition_index partition_size offset_lag is_future_key + partition_index => INT32 + partition_size => INT64 + offset_lag => INT64 + is_future_key => BOOLEAN + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The log directories. +# error_code: The error code, or 0 if there was no error. +# log_dir: The absolute log directory path. +# topics: The topics. +# name: The topic name. +# partitions: The partitions. +# partition_index: The partition index. +# partition_size: The size of the log segments in this partition in bytes. +# offset_lag: The lag of the log's LEO w.r.t. partition's HW (if it is the current log for the partition) or current replica's LEO (if it is the future log for the partition). +# is_future_key: True if this log is created by AlterReplicaLogDirsRequest and will replace the current log of the replica in the future. + + +DescribeLogDirsResponseV2 => throttle_time_ms {results} TAG_BUFFER + throttle_time_ms => INT32 + results => error_code log_dir {topics} TAG_BUFFER + error_code => INT16 + log_dir => COMPACT_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index partition_size offset_lag is_future_key TAG_BUFFER + partition_index => INT32 + partition_size => INT64 + offset_lag => INT64 + is_future_key => BOOLEAN + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The log directories. +# error_code: The error code, or 0 if there was no error. +# log_dir: The absolute log directory path. +# topics: The topics. +# name: The topic name. +# partitions: The partitions. +# partition_index: The partition index. +# partition_size: The size of the log segments in this partition in bytes. +# offset_lag: The lag of the log's LEO w.r.t. partition's HW (if it is the current log for the partition) or current replica's LEO (if it is the future log for the partition). +# is_future_key: True if this log is created by AlterReplicaLogDirsRequest and will replace the current log of the replica in the future. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -ApiVersionsResponseV0 => error_code [api_keys] +DescribeLogDirsResponseV3 => throttle_time_ms error_code {results} TAG_BUFFER + throttle_time_ms => INT32 error_code => INT16 - api_keys => api_key min_version max_version - api_key => INT16 - min_version => INT16 - max_version => INT16 + results => error_code log_dir {topics} TAG_BUFFER + error_code => INT16 + log_dir => COMPACT_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index partition_size offset_lag is_future_key TAG_BUFFER + partition_index => INT32 + partition_size => INT64 + offset_lag => INT64 + is_future_key => BOOLEAN -# error_code: The top-level error code. -# api_keys: The APIs supported by the broker. -# api_key: The API index. -# min_version: The minimum supported version, inclusive. -# max_version: The maximum supported version, inclusive. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# results: The log directories. +# error_code: The error code, or 0 if there was no error. +# log_dir: The absolute log directory path. +# topics: The topics. +# name: The topic name. +# partitions: The partitions. +# partition_index: The partition index. +# partition_size: The size of the log segments in this partition in bytes. +# offset_lag: The lag of the log's LEO w.r.t. partition's HW (if it is the current log for the partition) or current replica's LEO (if it is the future log for the partition). +# is_future_key: True if this log is created by AlterReplicaLogDirsRequest and will replace the current log of the replica in the future. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ApiVersionsResponseV1 => error_code [api_keys] throttle_time_ms - error_code => INT16 - api_keys => api_key min_version max_version - api_key => INT16 - min_version => INT16 - max_version => INT16 +DescribeLogDirsResponseV4 => throttle_time_ms error_code {results} TAG_BUFFER throttle_time_ms => INT32 + error_code => INT16 + results => error_code log_dir {topics} total_bytes usable_bytes TAG_BUFFER + error_code => INT16 + log_dir => COMPACT_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index partition_size offset_lag is_future_key TAG_BUFFER + partition_index => INT32 + partition_size => INT64 + offset_lag => INT64 + is_future_key => BOOLEAN + total_bytes => INT64 + usable_bytes => INT64 -# error_code: The top-level error code. -# api_keys: The APIs supported by the broker. -# api_key: The API index. -# min_version: The minimum supported version, inclusive. -# max_version: The maximum supported version, inclusive. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# results: The log directories. +# error_code: The error code, or 0 if there was no error. +# log_dir: The absolute log directory path. +# topics: The topics. +# name: The topic name. +# partitions: The partitions. +# partition_index: The partition index. +# partition_size: The size of the log segments in this partition in bytes. +# offset_lag: The lag of the log's LEO w.r.t. partition's HW (if it is the current log for the partition) or current replica's LEO (if it is the future log for the partition). +# is_future_key: True if this log is created by AlterReplicaLogDirsRequest and will replace the current log of the replica in the future. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# total_bytes: The total size in bytes of the volume the log directory is in. +# usable_bytes: The usable size in bytes of the volume the log directory is in. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -ApiVersionsResponseV2 => error_code [api_keys] throttle_time_ms - error_code => INT16 - api_keys => api_key min_version max_version - api_key => INT16 - min_version => INT16 - max_version => INT16 - throttle_time_ms => INT32 +#ApiKey: SaslAuthenticate, 36 +SaslAuthenticateRequestV0 => auth_bytes + auth_bytes => BYTES -# error_code: The top-level error code. -# api_keys: The APIs supported by the broker. -# api_key: The API index. -# min_version: The minimum supported version, inclusive. -# max_version: The maximum supported version, inclusive. -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# auth_bytes: The SASL authentication bytes from the client, as defined by the SASL mechanism. -ApiVersionsResponseV3 => error_code {api_keys} throttle_time_ms TAG_BUFFER - error_code => INT16 - api_keys => api_key min_version max_version TAG_BUFFER - api_key => INT16 - min_version => INT16 - max_version => INT16 - throttle_time_ms => INT32 +SaslAuthenticateRequestV1 => auth_bytes + auth_bytes => BYTES -# error_code: The top-level error code. -# api_keys: The APIs supported by the broker. -# api_key: The API index. -# min_version: The minimum supported version, inclusive. -# max_version: The maximum supported version, inclusive. -# _tagged_fields: The tagged fields -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# auth_bytes: The SASL authentication bytes from the client, as defined by the SASL mechanism. + + +SaslAuthenticateRequestV2 => auth_bytes TAG_BUFFER + auth_bytes => COMPACT_BYTES + +# auth_bytes: The SASL authentication bytes from the client, as defined by the SASL mechanism. # _tagged_fields: The tagged fields -#ApiKey: CreateTopics, 19 -CreateTopicsRequestV0 => [topics] timeout_ms - topics => name num_partitions replication_factor [assignments] [configs] - name => STRING - num_partitions => INT32 - replication_factor => INT16 - assignments => partition_index [broker_ids] - partition_index => INT32 - broker_ids => INT32 - configs => name value - name => STRING - value => NULLABLE_STRING - timeout_ms => INT32 +SaslAuthenticateResponseV0 => error_code error_message auth_bytes + error_code => INT16 + error_message => NULLABLE_STRING + auth_bytes => BYTES -# topics: The topics to create. -# name: The topic name. -# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. -# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. -# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. -# partition_index: The partition index. -# broker_ids: The brokers to place the partition on. -# configs: The custom topic configurations to set. -# name: The configuration name. -# value: The configuration value. -# timeout_ms: How long to wait in milliseconds before timing out the request. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# auth_bytes: The SASL authentication bytes from the server, as defined by the SASL mechanism. -CreateTopicsRequestV1 => [topics] timeout_ms validate_only - topics => name num_partitions replication_factor [assignments] [configs] - name => STRING - num_partitions => INT32 - replication_factor => INT16 - assignments => partition_index [broker_ids] - partition_index => INT32 - broker_ids => INT32 - configs => name value - name => STRING - value => NULLABLE_STRING - timeout_ms => INT32 - validate_only => BOOLEAN +SaslAuthenticateResponseV1 => error_code error_message auth_bytes session_lifetime_ms + error_code => INT16 + error_message => NULLABLE_STRING + auth_bytes => BYTES + session_lifetime_ms => INT64 -# topics: The topics to create. -# name: The topic name. -# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. -# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. -# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. -# partition_index: The partition index. -# broker_ids: The brokers to place the partition on. -# configs: The custom topic configurations to set. -# name: The configuration name. -# value: The configuration value. -# timeout_ms: How long to wait in milliseconds before timing out the request. -# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# auth_bytes: The SASL authentication bytes from the server, as defined by the SASL mechanism. +# session_lifetime_ms: Number of milliseconds after which only re-authentication over the existing connection to create a new session can occur. -CreateTopicsRequestV2 => [topics] timeout_ms validate_only - topics => name num_partitions replication_factor [assignments] [configs] - name => STRING - num_partitions => INT32 - replication_factor => INT16 - assignments => partition_index [broker_ids] - partition_index => INT32 - broker_ids => INT32 - configs => name value - name => STRING - value => NULLABLE_STRING - timeout_ms => INT32 - validate_only => BOOLEAN +SaslAuthenticateResponseV2 => error_code error_message auth_bytes session_lifetime_ms TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + auth_bytes => COMPACT_BYTES + session_lifetime_ms => INT64 -# topics: The topics to create. -# name: The topic name. -# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. -# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. -# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. -# partition_index: The partition index. -# broker_ids: The brokers to place the partition on. -# configs: The custom topic configurations to set. -# name: The configuration name. -# value: The configuration value. -# timeout_ms: How long to wait in milliseconds before timing out the request. -# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# auth_bytes: The SASL authentication bytes from the server, as defined by the SASL mechanism. +# session_lifetime_ms: Number of milliseconds after which only re-authentication over the existing connection to create a new session can occur. +# _tagged_fields: The tagged fields -CreateTopicsRequestV3 => [topics] timeout_ms validate_only - topics => name num_partitions replication_factor [assignments] [configs] +#ApiKey: CreatePartitions, 37 +CreatePartitionsRequestV0 => [topics] timeout_ms validate_only + topics => name count [assignments] name => STRING - num_partitions => INT32 - replication_factor => INT16 - assignments => partition_index [broker_ids] - partition_index => INT32 + count => INT32 + assignments => [broker_ids] broker_ids => INT32 - configs => name value - name => STRING - value => NULLABLE_STRING timeout_ms => INT32 validate_only => BOOLEAN -# topics: The topics to create. +# topics: Each topic that we want to create new partitions inside. # name: The topic name. -# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. -# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. -# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. -# partition_index: The partition index. -# broker_ids: The brokers to place the partition on. -# configs: The custom topic configurations to set. -# name: The configuration name. -# value: The configuration value. -# timeout_ms: How long to wait in milliseconds before timing out the request. -# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# count: The new partition count. +# assignments: The new partition assignments. +# broker_ids: The assigned broker IDs. +# timeout_ms: The time in ms to wait for the partitions to be created. +# validate_only: If true, then validate the request, but don't actually increase the number of partitions. -CreateTopicsRequestV4 => [topics] timeout_ms validate_only - topics => name num_partitions replication_factor [assignments] [configs] +CreatePartitionsRequestV1 => [topics] timeout_ms validate_only + topics => name count [assignments] name => STRING - num_partitions => INT32 - replication_factor => INT16 - assignments => partition_index [broker_ids] - partition_index => INT32 + count => INT32 + assignments => [broker_ids] broker_ids => INT32 - configs => name value - name => STRING - value => NULLABLE_STRING timeout_ms => INT32 validate_only => BOOLEAN -# topics: The topics to create. +# topics: Each topic that we want to create new partitions inside. # name: The topic name. -# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. -# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. -# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. -# partition_index: The partition index. -# broker_ids: The brokers to place the partition on. -# configs: The custom topic configurations to set. -# name: The configuration name. -# value: The configuration value. -# timeout_ms: How long to wait in milliseconds before timing out the request. -# validate_only: If true, check that the topics can be created as specified, but don't create anything. +# count: The new partition count. +# assignments: The new partition assignments. +# broker_ids: The assigned broker IDs. +# timeout_ms: The time in ms to wait for the partitions to be created. +# validate_only: If true, then validate the request, but don't actually increase the number of partitions. -CreateTopicsRequestV5 => {topics} timeout_ms validate_only TAG_BUFFER - topics => name num_partitions replication_factor {assignments} {configs} TAG_BUFFER +CreatePartitionsRequestV2 => {topics} timeout_ms validate_only TAG_BUFFER + topics => name count {assignments} TAG_BUFFER name => COMPACT_STRING - num_partitions => INT32 - replication_factor => INT16 - assignments => partition_index {broker_ids} TAG_BUFFER - partition_index => INT32 + count => INT32 + assignments => {broker_ids} TAG_BUFFER broker_ids => INT32 - configs => name value TAG_BUFFER - name => COMPACT_STRING - value => COMPACT_NULLABLE_STRING - timeout_ms => INT32 - validate_only => BOOLEAN - -# topics: The topics to create. -# name: The topic name. -# num_partitions: The number of partitions to create in the topic, or -1 if we are either specifying a manual partition assignment or using the default partitions. -# replication_factor: The number of replicas to create for each partition in the topic, or -1 if we are either specifying a manual partition assignment or using the default replication factor. -# assignments: The manual partition assignment, or the empty array if we are using automatic assignment. -# partition_index: The partition index. -# broker_ids: The brokers to place the partition on. -# _tagged_fields: The tagged fields -# configs: The custom topic configurations to set. -# name: The configuration name. -# value: The configuration value. -# _tagged_fields: The tagged fields -# _tagged_fields: The tagged fields -# timeout_ms: How long to wait in milliseconds before timing out the request. -# validate_only: If true, check that the topics can be created as specified, but don't create anything. -# _tagged_fields: The tagged fields - - -CreateTopicsResponseV0 => [topics] - topics => name error_code - name => STRING - error_code => INT16 + timeout_ms => INT32 + validate_only => BOOLEAN -# topics: Results for each topic we tried to create. +# topics: Each topic that we want to create new partitions inside. # name: The topic name. -# error_code: The error code, or 0 if there was no error. +# count: The new partition count. +# assignments: The new partition assignments. +# broker_ids: The assigned broker IDs. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# timeout_ms: The time in ms to wait for the partitions to be created. +# validate_only: If true, then validate the request, but don't actually increase the number of partitions. +# _tagged_fields: The tagged fields -CreateTopicsResponseV1 => [topics] - topics => name error_code error_message - name => STRING - error_code => INT16 - error_message => NULLABLE_STRING +CreatePartitionsRequestV3 => {topics} timeout_ms validate_only TAG_BUFFER + topics => name count {assignments} TAG_BUFFER + name => COMPACT_STRING + count => INT32 + assignments => {broker_ids} TAG_BUFFER + broker_ids => INT32 + timeout_ms => INT32 + validate_only => BOOLEAN -# topics: Results for each topic we tried to create. +# topics: Each topic that we want to create new partitions inside. # name: The topic name. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. +# count: The new partition count. +# assignments: The new partition assignments. +# broker_ids: The assigned broker IDs. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# timeout_ms: The time in ms to wait for the partitions to be created. +# validate_only: If true, then validate the request, but don't actually increase the number of partitions. +# _tagged_fields: The tagged fields -CreateTopicsResponseV2 => throttle_time_ms [topics] +CreatePartitionsResponseV0 => throttle_time_ms [results] throttle_time_ms => INT32 - topics => name error_code error_message + results => name error_code error_message name => STRING error_code => INT16 error_message => NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: Results for each topic we tried to create. +# results: The partition creation results for each topic. # name: The topic name. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. -CreateTopicsResponseV3 => throttle_time_ms [topics] +CreatePartitionsResponseV1 => throttle_time_ms [results] throttle_time_ms => INT32 - topics => name error_code error_message + results => name error_code error_message name => STRING error_code => INT16 error_message => NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: Results for each topic we tried to create. +# results: The partition creation results for each topic. # name: The topic name. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. -CreateTopicsResponseV4 => throttle_time_ms [topics] +CreatePartitionsResponseV2 => throttle_time_ms {results} TAG_BUFFER throttle_time_ms => INT32 - topics => name error_code error_message - name => STRING + results => name error_code error_message TAG_BUFFER + name => COMPACT_STRING error_code => INT16 - error_message => NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: Results for each topic we tried to create. +# results: The partition creation results for each topic. # name: The topic name. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -CreateTopicsResponseV5 => throttle_time_ms {topics} TAG_BUFFER +CreatePartitionsResponseV3 => throttle_time_ms {results} TAG_BUFFER throttle_time_ms => INT32 - topics => name error_code error_message num_partitions replication_factor {configs} TAG_BUFFER + results => name error_code error_message TAG_BUFFER name => COMPACT_STRING error_code => INT16 error_message => COMPACT_NULLABLE_STRING - num_partitions => INT32 - replication_factor => INT16 - configs => name value read_only config_source is_sensitive TAG_BUFFER - name => COMPACT_STRING - value => COMPACT_NULLABLE_STRING - read_only => BOOLEAN - config_source => INT8 - is_sensitive => BOOLEAN # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: Results for each topic we tried to create. +# results: The partition creation results for each topic. # name: The topic name. -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. -# num_partitions: Number of partitions of the topic. -# replication_factor: Replicator factor of the topic. -# configs: Configuration of the topic. -# name: The configuration name. -# value: The configuration value. -# read_only: True if the configuration is read-only. -# config_source: The configuration source. -# is_sensitive: True if this configuration is sensitive. -# _tagged_fields: The tagged fields +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: DeleteTopics, 20 -DeleteTopicsRequestV0 => [topic_names] timeout_ms - topic_names => STRING - timeout_ms => INT32 - -# topic_names: The names of the topics to delete -# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. +#ApiKey: CreateDelegationToken, 38 +CreateDelegationTokenRequestV1 => [renewers] max_lifetime_ms + renewers => principal_type principal_name + principal_type => STRING + principal_name => STRING + max_lifetime_ms => INT64 +# renewers: A list of those who are allowed to renew this token before it expires. +# principal_type: The type of the Kafka principal. +# principal_name: The name of the Kafka principal. +# max_lifetime_ms: The maximum lifetime of the token in milliseconds, or -1 to use the server side default. -DeleteTopicsRequestV1 => [topic_names] timeout_ms - topic_names => STRING - timeout_ms => INT32 -# topic_names: The names of the topics to delete -# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. +CreateDelegationTokenRequestV2 => {renewers} max_lifetime_ms TAG_BUFFER + renewers => principal_type principal_name TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + max_lifetime_ms => INT64 +# renewers: A list of those who are allowed to renew this token before it expires. +# principal_type: The type of the Kafka principal. +# principal_name: The name of the Kafka principal. +# _tagged_fields: The tagged fields +# max_lifetime_ms: The maximum lifetime of the token in milliseconds, or -1 to use the server side default. +# _tagged_fields: The tagged fields -DeleteTopicsRequestV2 => [topic_names] timeout_ms - topic_names => STRING - timeout_ms => INT32 -# topic_names: The names of the topics to delete -# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. +CreateDelegationTokenRequestV3 => owner_principal_type owner_principal_name {renewers} max_lifetime_ms TAG_BUFFER + owner_principal_type => COMPACT_NULLABLE_STRING + owner_principal_name => COMPACT_NULLABLE_STRING + renewers => principal_type principal_name TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + max_lifetime_ms => INT64 +# owner_principal_type: The principal type of the owner of the token. If it's null it defaults to the token request principal. +# owner_principal_name: The principal name of the owner of the token. If it's null it defaults to the token request principal. +# renewers: A list of those who are allowed to renew this token before it expires. +# principal_type: The type of the Kafka principal. +# principal_name: The name of the Kafka principal. +# _tagged_fields: The tagged fields +# max_lifetime_ms: The maximum lifetime of the token in milliseconds, or -1 to use the server side default. +# _tagged_fields: The tagged fields -DeleteTopicsRequestV3 => [topic_names] timeout_ms - topic_names => STRING - timeout_ms => INT32 -# topic_names: The names of the topics to delete -# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. -DeleteTopicsRequestV4 => {topic_names} timeout_ms TAG_BUFFER - topic_names => COMPACT_STRING - timeout_ms => INT32 +CreateDelegationTokenResponseV1 => error_code principal_type principal_name issue_timestamp_ms expiry_timestamp_ms max_timestamp_ms token_id hmac throttle_time_ms + error_code => INT16 + principal_type => STRING + principal_name => STRING + issue_timestamp_ms => INT64 + expiry_timestamp_ms => INT64 + max_timestamp_ms => INT64 + token_id => STRING + hmac => BYTES + throttle_time_ms => INT32 -# topic_names: The names of the topics to delete -# timeout_ms: The length of time in milliseconds to wait for the deletions to complete. -# _tagged_fields: The tagged fields +# error_code: The top-level error, or zero if there was no error. +# principal_type: The principal type of the token owner. +# principal_name: The name of the token owner. +# issue_timestamp_ms: When this token was generated. +# expiry_timestamp_ms: When this token expires. +# max_timestamp_ms: The maximum lifetime of this token. +# token_id: The token UUID. +# hmac: HMAC of the delegation token. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -DeleteTopicsResponseV0 => [responses] - responses => name error_code - name => STRING - error_code => INT16 +CreateDelegationTokenResponseV2 => error_code principal_type principal_name issue_timestamp_ms expiry_timestamp_ms max_timestamp_ms token_id hmac throttle_time_ms TAG_BUFFER + error_code => INT16 + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + issue_timestamp_ms => INT64 + expiry_timestamp_ms => INT64 + max_timestamp_ms => INT64 + token_id => COMPACT_STRING + hmac => COMPACT_BYTES + throttle_time_ms => INT32 -# responses: The results for each topic we tried to delete. -# name: The topic name -# error_code: The deletion error, or 0 if the deletion succeeded. +# error_code: The top-level error, or zero if there was no error. +# principal_type: The principal type of the token owner. +# principal_name: The name of the token owner. +# issue_timestamp_ms: When this token was generated. +# expiry_timestamp_ms: When this token expires. +# max_timestamp_ms: The maximum lifetime of this token. +# token_id: The token UUID. +# hmac: HMAC of the delegation token. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -DeleteTopicsResponseV1 => throttle_time_ms [responses] +CreateDelegationTokenResponseV3 => error_code principal_type principal_name token_requester_principal_type token_requester_principal_name issue_timestamp_ms expiry_timestamp_ms max_timestamp_ms token_id hmac throttle_time_ms TAG_BUFFER + error_code => INT16 + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + token_requester_principal_type => COMPACT_STRING + token_requester_principal_name => COMPACT_STRING + issue_timestamp_ms => INT64 + expiry_timestamp_ms => INT64 + max_timestamp_ms => INT64 + token_id => COMPACT_STRING + hmac => COMPACT_BYTES throttle_time_ms => INT32 - responses => name error_code - name => STRING - error_code => INT16 +# error_code: The top-level error, or zero if there was no error. +# principal_type: The principal type of the token owner. +# principal_name: The name of the token owner. +# token_requester_principal_type: The principal type of the requester of the token. +# token_requester_principal_name: The principal type of the requester of the token. +# issue_timestamp_ms: When this token was generated. +# expiry_timestamp_ms: When this token expires. +# max_timestamp_ms: The maximum lifetime of this token. +# token_id: The token UUID. +# hmac: HMAC of the delegation token. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# responses: The results for each topic we tried to delete. -# name: The topic name -# error_code: The deletion error, or 0 if the deletion succeeded. +# _tagged_fields: The tagged fields -DeleteTopicsResponseV2 => throttle_time_ms [responses] - throttle_time_ms => INT32 - responses => name error_code - name => STRING - error_code => INT16 +#ApiKey: RenewDelegationToken, 39 +RenewDelegationTokenRequestV1 => hmac renew_period_ms + hmac => BYTES + renew_period_ms => INT64 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# responses: The results for each topic we tried to delete. -# name: The topic name -# error_code: The deletion error, or 0 if the deletion succeeded. +# hmac: The HMAC of the delegation token to be renewed. +# renew_period_ms: The renewal time period in milliseconds. -DeleteTopicsResponseV3 => throttle_time_ms [responses] +RenewDelegationTokenRequestV2 => hmac renew_period_ms TAG_BUFFER + hmac => COMPACT_BYTES + renew_period_ms => INT64 + +# hmac: The HMAC of the delegation token to be renewed. +# renew_period_ms: The renewal time period in milliseconds. +# _tagged_fields: The tagged fields + + + + +RenewDelegationTokenResponseV1 => error_code expiry_timestamp_ms throttle_time_ms + error_code => INT16 + expiry_timestamp_ms => INT64 throttle_time_ms => INT32 - responses => name error_code - name => STRING - error_code => INT16 +# error_code: The error code, or 0 if there was no error. +# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# responses: The results for each topic we tried to delete. -# name: The topic name -# error_code: The deletion error, or 0 if the deletion succeeded. -DeleteTopicsResponseV4 => throttle_time_ms {responses} TAG_BUFFER +RenewDelegationTokenResponseV2 => error_code expiry_timestamp_ms throttle_time_ms TAG_BUFFER + error_code => INT16 + expiry_timestamp_ms => INT64 throttle_time_ms => INT32 - responses => name error_code TAG_BUFFER - name => COMPACT_STRING - error_code => INT16 +# error_code: The error code, or 0 if there was no error. +# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# responses: The results for each topic we tried to delete. -# name: The topic name -# error_code: The deletion error, or 0 if the deletion succeeded. -# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: DeleteRecords, 21 -DeleteRecordsRequestV0 => [topics] timeout - topics => topic [partitions] - topic => STRING - partitions => partition offset - partition => INT32 - offset => INT64 - timeout => INT32 +#ApiKey: ExpireDelegationToken, 40 +ExpireDelegationTokenRequestV1 => hmac expiry_time_period_ms + hmac => BYTES + expiry_time_period_ms => INT64 -# topic: Name of topic -# partition: Topic partition id -# offset: The offset before which the messages will be deleted. -1 means high-watermark for the partition. -# timeout: The maximum time to await a response in ms. +# hmac: The HMAC of the delegation token to be expired. +# expiry_time_period_ms: The expiry time period in milliseconds. + + +ExpireDelegationTokenRequestV2 => hmac expiry_time_period_ms TAG_BUFFER + hmac => COMPACT_BYTES + expiry_time_period_ms => INT64 +# hmac: The HMAC of the delegation token to be expired. +# expiry_time_period_ms: The expiry time period in milliseconds. +# _tagged_fields: The tagged fields -DeleteRecordsRequestV1 => [topics] timeout - topics => topic [partitions] - topic => STRING - partitions => partition offset - partition => INT32 - offset => INT64 - timeout => INT32 -# topic: Name of topic -# partition: Topic partition id -# offset: The offset before which the messages will be deleted. -1 means high-watermark for the partition. -# timeout: The maximum time to await a response in ms. -DeleteRecordsResponseV0 => throttle_time_ms [topics] +ExpireDelegationTokenResponseV1 => error_code expiry_timestamp_ms throttle_time_ms + error_code => INT16 + expiry_timestamp_ms => INT64 throttle_time_ms => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition low_watermark error_code - partition => INT32 - low_watermark => INT64 - error_code => INT16 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# low_watermark: Smallest available offset of all live replicas -# error_code: Response error code +# error_code: The error code, or 0 if there was no error. +# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -DeleteRecordsResponseV1 => throttle_time_ms [topics] +ExpireDelegationTokenResponseV2 => error_code expiry_timestamp_ms throttle_time_ms TAG_BUFFER + error_code => INT16 + expiry_timestamp_ms => INT64 throttle_time_ms => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition low_watermark error_code - partition => INT32 - low_watermark => INT64 - error_code => INT16 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# low_watermark: Smallest available offset of all live replicas -# error_code: Response error code +# error_code: The error code, or 0 if there was no error. +# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -#ApiKey: InitProducerId, 22 -InitProducerIdRequestV0 => transactional_id transaction_timeout_ms - transactional_id => NULLABLE_STRING - transaction_timeout_ms => INT32 +#ApiKey: DescribeDelegationToken, 41 +DescribeDelegationTokenRequestV1 => [owners] + owners => principal_type principal_name + principal_type => STRING + principal_name => STRING -# transactional_id: The transactional id, or null if the producer is not transactional. -# transaction_timeout_ms: The time in ms to wait for before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# owners: Each owner that we want to describe delegation tokens for, or null to describe all tokens. +# principal_type: The owner principal type. +# principal_name: The owner principal name. -InitProducerIdRequestV1 => transactional_id transaction_timeout_ms - transactional_id => NULLABLE_STRING - transaction_timeout_ms => INT32 +DescribeDelegationTokenRequestV2 => {owners} TAG_BUFFER + owners => principal_type principal_name TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING -# transactional_id: The transactional id, or null if the producer is not transactional. -# transaction_timeout_ms: The time in ms to wait for before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# owners: Each owner that we want to describe delegation tokens for, or null to describe all tokens. +# principal_type: The owner principal type. +# principal_name: The owner principal name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -InitProducerIdRequestV2 => transactional_id transaction_timeout_ms TAG_BUFFER - transactional_id => COMPACT_NULLABLE_STRING - transaction_timeout_ms => INT32 +DescribeDelegationTokenRequestV3 => {owners} TAG_BUFFER + owners => principal_type principal_name TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING -# transactional_id: The transactional id, or null if the producer is not transactional. -# transaction_timeout_ms: The time in ms to wait for before aborting idle transactions sent by this producer. This is only relevant if a TransactionalId has been defined. +# owners: Each owner that we want to describe delegation tokens for, or null to describe all tokens. +# principal_type: The owner principal type. +# principal_name: The owner principal name. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -InitProducerIdResponseV0 => throttle_time_ms error_code producer_id producer_epoch - throttle_time_ms => INT32 - error_code => INT16 - producer_id => INT64 - producer_epoch => INT16 - -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The error code, or 0 if there was no error. -# producer_id: The current producer id. -# producer_epoch: The current epoch associated with the producer id. -InitProducerIdResponseV1 => throttle_time_ms error_code producer_id producer_epoch - throttle_time_ms => INT32 +DescribeDelegationTokenResponseV1 => error_code [tokens] throttle_time_ms error_code => INT16 - producer_id => INT64 - producer_epoch => INT16 + tokens => principal_type principal_name issue_timestamp expiry_timestamp max_timestamp token_id hmac [renewers] + principal_type => STRING + principal_name => STRING + issue_timestamp => INT64 + expiry_timestamp => INT64 + max_timestamp => INT64 + token_id => STRING + hmac => BYTES + renewers => principal_type principal_name + principal_type => STRING + principal_name => STRING + throttle_time_ms => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# producer_id: The current producer id. -# producer_epoch: The current epoch associated with the producer id. +# tokens: The tokens. +# principal_type: The token principal type. +# principal_name: The token principal name. +# issue_timestamp: The token issue timestamp in milliseconds. +# expiry_timestamp: The token expiry timestamp in milliseconds. +# max_timestamp: The token maximum timestamp length in milliseconds. +# token_id: The token ID. +# hmac: The token HMAC. +# renewers: Those who are able to renew this token before it expires. +# principal_type: The renewer principal type. +# principal_name: The renewer principal name. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -InitProducerIdResponseV2 => throttle_time_ms error_code producer_id producer_epoch TAG_BUFFER - throttle_time_ms => INT32 +DescribeDelegationTokenResponseV2 => error_code {tokens} throttle_time_ms TAG_BUFFER error_code => INT16 - producer_id => INT64 - producer_epoch => INT16 + tokens => principal_type principal_name issue_timestamp expiry_timestamp max_timestamp token_id hmac {renewers} TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + issue_timestamp => INT64 + expiry_timestamp => INT64 + max_timestamp => INT64 + token_id => COMPACT_STRING + hmac => COMPACT_BYTES + renewers => principal_type principal_name TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + throttle_time_ms => INT32 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The error code, or 0 if there was no error. -# producer_id: The current producer id. -# producer_epoch: The current epoch associated with the producer id. +# tokens: The tokens. +# principal_type: The token principal type. +# principal_name: The token principal name. +# issue_timestamp: The token issue timestamp in milliseconds. +# expiry_timestamp: The token expiry timestamp in milliseconds. +# max_timestamp: The token maximum timestamp length in milliseconds. +# token_id: The token ID. +# hmac: The token HMAC. +# renewers: Those who are able to renew this token before it expires. +# principal_type: The renewer principal type. +# principal_name: The renewer principal name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # _tagged_fields: The tagged fields -#ApiKey: OffsetForLeaderEpoch, 23 -OffsetForLeaderEpochRequestV0 => [topics] - topics => topic [partitions] - topic => STRING - partitions => partition leader_epoch - partition => INT32 - leader_epoch => INT32 +DescribeDelegationTokenResponseV3 => error_code {tokens} throttle_time_ms TAG_BUFFER + error_code => INT16 + tokens => principal_type principal_name token_requester_principal_type token_requester_principal_name issue_timestamp expiry_timestamp max_timestamp token_id hmac {renewers} TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + token_requester_principal_type => COMPACT_STRING + token_requester_principal_name => COMPACT_STRING + issue_timestamp => INT64 + expiry_timestamp => INT64 + max_timestamp => INT64 + token_id => COMPACT_STRING + hmac => COMPACT_BYTES + renewers => principal_type principal_name TAG_BUFFER + principal_type => COMPACT_STRING + principal_name => COMPACT_STRING + throttle_time_ms => INT32 -# topics: An array of topics to get epochs for -# topic: Name of topic -# partitions: An array of partitions to get epochs for -# partition: Topic partition id -# leader_epoch: The epoch to lookup an offset for. +# error_code: The error code, or 0 if there was no error. +# tokens: The tokens. +# principal_type: The token principal type. +# principal_name: The token principal name. +# token_requester_principal_type: The principal type of the requester of the token. +# token_requester_principal_name: The principal type of the requester of the token. +# issue_timestamp: The token issue timestamp in milliseconds. +# expiry_timestamp: The token expiry timestamp in milliseconds. +# max_timestamp: The token maximum timestamp length in milliseconds. +# token_id: The token ID. +# hmac: The token HMAC. +# renewers: Those who are able to renew this token before it expires. +# principal_type: The renewer principal type. +# principal_name: The renewer principal name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# _tagged_fields: The tagged fields -OffsetForLeaderEpochRequestV1 => [topics] - topics => topic [partitions] - topic => STRING - partitions => partition leader_epoch - partition => INT32 - leader_epoch => INT32 +#ApiKey: DeleteGroups, 42 +DeleteGroupsRequestV0 => [groups_names] + groups_names => STRING -# topics: An array of topics to get epochs for -# topic: Name of topic -# partitions: An array of partitions to get epochs for -# partition: Topic partition id -# leader_epoch: The epoch to lookup an offset for. +# groups_names: The group names to delete. -OffsetForLeaderEpochRequestV2 => [topics] - topics => topic [partitions] - topic => STRING - partitions => partition current_leader_epoch leader_epoch - partition => INT32 - current_leader_epoch => INT32 - leader_epoch => INT32 +DeleteGroupsRequestV1 => [groups_names] + groups_names => STRING -# topics: An array of topics to get epochs for -# topic: Name of topic -# partitions: An array of partitions to get epochs for -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# leader_epoch: The epoch to lookup an offset for. +# groups_names: The group names to delete. -OffsetForLeaderEpochRequestV3 => replica_id [topics] - replica_id => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition current_leader_epoch leader_epoch - partition => INT32 - current_leader_epoch => INT32 - leader_epoch => INT32 +DeleteGroupsRequestV2 => {groups_names} TAG_BUFFER + groups_names => COMPACT_STRING -# replica_id: Broker id of the follower. For normal consumers, use -1. -# topics: An array of topics to get epochs for -# topic: Name of topic -# partitions: An array of partitions to get epochs for -# partition: Topic partition id -# current_leader_epoch: The current leader epoch, if provided, is used to fence consumers/replicas with old metadata. If the epoch provided by the client is larger than the current epoch known to the broker, then the UNKNOWN_LEADER_EPOCH error code will be returned. If the provided epoch is smaller, then the FENCED_LEADER_EPOCH error code will be returned. -# leader_epoch: The epoch to lookup an offset for. +# groups_names: The group names to delete. +# _tagged_fields: The tagged fields -OffsetForLeaderEpochResponseV0 => [topics] - topics => topic [partitions] - topic => STRING - partitions => error_code partition end_offset - error_code => INT16 - partition => INT32 - end_offset => INT64 +DeleteGroupsResponseV0 => throttle_time_ms [results] + throttle_time_ms => INT32 + results => group_id error_code + group_id => STRING + error_code => INT16 -# topics: An array of topics for which we have leader offsets for some requested partition leader epoch -# topic: Name of topic -# partitions: An array of offsets by partition -# error_code: Response error code -# partition: Topic partition id -# end_offset: The end offset +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The deletion results. +# group_id: The group id. +# error_code: The deletion error, or 0 if the deletion succeeded. -OffsetForLeaderEpochResponseV1 => [topics] - topics => topic [partitions] - topic => STRING - partitions => error_code partition leader_epoch end_offset - error_code => INT16 - partition => INT32 - leader_epoch => INT32 - end_offset => INT64 +DeleteGroupsResponseV1 => throttle_time_ms [results] + throttle_time_ms => INT32 + results => group_id error_code + group_id => STRING + error_code => INT16 -# topics: An array of topics for which we have leader offsets for some requested partition leader epoch -# topic: Name of topic -# partitions: An array of offsets by partition -# error_code: Response error code -# partition: Topic partition id -# leader_epoch: The leader epoch -# end_offset: The end offset +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The deletion results. +# group_id: The group id. +# error_code: The deletion error, or 0 if the deletion succeeded. -OffsetForLeaderEpochResponseV2 => throttle_time_ms [topics] +DeleteGroupsResponseV2 => throttle_time_ms {results} TAG_BUFFER throttle_time_ms => INT32 - topics => topic [partitions] - topic => STRING - partitions => error_code partition leader_epoch end_offset - error_code => INT16 - partition => INT32 - leader_epoch => INT32 - end_offset => INT64 + results => group_id error_code TAG_BUFFER + group_id => COMPACT_STRING + error_code => INT16 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topics: An array of topics for which we have leader offsets for some requested partition leader epoch -# topic: Name of topic -# partitions: An array of offsets by partition -# error_code: Response error code -# partition: Topic partition id -# leader_epoch: The leader epoch -# end_offset: The end offset +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The deletion results. +# group_id: The group id. +# error_code: The deletion error, or 0 if the deletion succeeded. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -OffsetForLeaderEpochResponseV3 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => topic [partitions] +#ApiKey: ElectLeaders, 43 +ElectLeadersRequestV0 => [topic_partitions] timeout_ms + topic_partitions => topic [partitions] topic => STRING - partitions => error_code partition leader_epoch end_offset - error_code => INT16 - partition => INT32 - leader_epoch => INT32 - end_offset => INT64 + partitions => INT32 + timeout_ms => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topics: An array of topics for which we have leader offsets for some requested partition leader epoch -# topic: Name of topic -# partitions: An array of offsets by partition -# error_code: Response error code -# partition: Topic partition id -# leader_epoch: The leader epoch -# end_offset: The end offset +# topic_partitions: The topic partitions to elect leaders. +# topic: The name of a topic. +# partitions: The partitions of this topic whose leader should be elected. +# timeout_ms: The time in ms to wait for the election to complete. -#ApiKey: AddPartitionsToTxn, 24 -AddPartitionsToTxnRequestV0 => transactional_id producer_id producer_epoch [topics] - transactional_id => STRING - producer_id => INT64 - producer_epoch => INT16 - topics => topic [partitions] +ElectLeadersRequestV1 => election_type [topic_partitions] timeout_ms + election_type => INT8 + topic_partitions => topic [partitions] topic => STRING partitions => INT32 + timeout_ms => INT32 -# transactional_id: The transactional id corresponding to the transaction. -# producer_id: Current producer id in use by the transactional id. -# producer_epoch: Current epoch associated with the producer id. -# topics: The partitions to add to the transaction. -# topic: Name of topic - +# election_type: Type of elections to conduct for the partition. A value of '0' elects the preferred replica. A value of '1' elects the first live replica if there are no in-sync replica. +# topic_partitions: The topic partitions to elect leaders. +# topic: The name of a topic. +# partitions: The partitions of this topic whose leader should be elected. +# timeout_ms: The time in ms to wait for the election to complete. -AddPartitionsToTxnRequestV1 => transactional_id producer_id producer_epoch [topics] - transactional_id => STRING - producer_id => INT64 - producer_epoch => INT16 - topics => topic [partitions] - topic => STRING + +ElectLeadersRequestV2 => election_type {topic_partitions} timeout_ms TAG_BUFFER + election_type => INT8 + topic_partitions => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING partitions => INT32 + timeout_ms => INT32 -# transactional_id: The transactional id corresponding to the transaction. -# producer_id: Current producer id in use by the transactional id. -# producer_epoch: Current epoch associated with the producer id. -# topics: The partitions to add to the transaction. -# topic: Name of topic +# election_type: Type of elections to conduct for the partition. A value of '0' elects the preferred replica. A value of '1' elects the first live replica if there are no in-sync replica. +# topic_partitions: The topic partitions to elect leaders. +# topic: The name of a topic. +# partitions: The partitions of this topic whose leader should be elected. +# _tagged_fields: The tagged fields +# timeout_ms: The time in ms to wait for the election to complete. +# _tagged_fields: The tagged fields -AddPartitionsToTxnResponseV0 => throttle_time_ms [errors] +ElectLeadersResponseV0 => throttle_time_ms [replica_election_results] throttle_time_ms => INT32 - errors => topic [partition_errors] + replica_election_results => topic [partition_result] topic => STRING - partition_errors => partition error_code - partition => INT32 + partition_result => partition_id error_code error_message + partition_id => INT32 error_code => INT16 + error_message => NULLABLE_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# replica_election_results: The election results, or an empty array if the requester did not have permission and the request asks for all partitions. +# topic: The topic name. +# partition_result: The results for each partition. +# partition_id: The partition id. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. -AddPartitionsToTxnResponseV1 => throttle_time_ms [errors] +ElectLeadersResponseV1 => throttle_time_ms error_code [replica_election_results] throttle_time_ms => INT32 - errors => topic [partition_errors] + error_code => INT16 + replica_election_results => topic [partition_result] topic => STRING - partition_errors => partition error_code - partition => INT32 + partition_result => partition_id error_code error_message + partition_id => INT32 error_code => INT16 + error_message => NULLABLE_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# replica_election_results: The election results, or an empty array if the requester did not have permission and the request asks for all partitions. +# topic: The topic name. +# partition_result: The results for each partition. +# partition_id: The partition id. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. -#ApiKey: AddOffsetsToTxn, 25 -AddOffsetsToTxnRequestV0 => transactional_id producer_id producer_epoch group_id - transactional_id => STRING - producer_id => INT64 - producer_epoch => INT16 - group_id => STRING +ElectLeadersResponseV2 => throttle_time_ms error_code {replica_election_results} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + replica_election_results => topic {partition_result} TAG_BUFFER + topic => COMPACT_STRING + partition_result => partition_id error_code error_message TAG_BUFFER + partition_id => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING -# transactional_id: The transactional id corresponding to the transaction. -# producer_id: Current producer id in use by the transactional id. -# producer_epoch: Current epoch associated with the producer id. -# group_id: The unique group identifier +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# replica_election_results: The election results, or an empty array if the requester did not have permission and the request asks for all partitions. +# topic: The topic name. +# partition_result: The results for each partition. +# partition_id: The partition id. +# error_code: The result error, or zero if there was no error. +# error_message: The result message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -AddOffsetsToTxnRequestV1 => transactional_id producer_id producer_epoch group_id - transactional_id => STRING - producer_id => INT64 - producer_epoch => INT16 - group_id => STRING +#ApiKey: IncrementalAlterConfigs, 44 +IncrementalAlterConfigsRequestV0 => [resources] validate_only + resources => resource_type resource_name [configs] + resource_type => INT8 + resource_name => STRING + configs => name config_operation value + name => STRING + config_operation => INT8 + value => NULLABLE_STRING + validate_only => BOOLEAN -# transactional_id: The transactional id corresponding to the transaction. -# producer_id: Current producer id in use by the transactional id. -# producer_epoch: Current epoch associated with the producer id. -# group_id: The unique group identifier +# resources: The incremental updates for each resource. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: The configurations. +# name: The configuration key name. +# config_operation: The type (Set, Delete, Append, Subtract) of operation. +# value: The value to set for the configuration key. +# validate_only: True if we should validate the request, but not change the configurations. -AddOffsetsToTxnResponseV0 => throttle_time_ms error_code - throttle_time_ms => INT32 - error_code => INT16 +IncrementalAlterConfigsRequestV1 => {resources} validate_only TAG_BUFFER + resources => resource_type resource_name {configs} TAG_BUFFER + resource_type => INT8 + resource_name => COMPACT_STRING + configs => name config_operation value TAG_BUFFER + name => COMPACT_STRING + config_operation => INT8 + value => COMPACT_NULLABLE_STRING + validate_only => BOOLEAN -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code +# resources: The incremental updates for each resource. +# resource_type: The resource type. +# resource_name: The resource name. +# configs: The configurations. +# name: The configuration key name. +# config_operation: The type (Set, Delete, Append, Subtract) of operation. +# value: The value to set for the configuration key. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# validate_only: True if we should validate the request, but not change the configurations. +# _tagged_fields: The tagged fields -AddOffsetsToTxnResponseV1 => throttle_time_ms error_code +IncrementalAlterConfigsResponseV0 => throttle_time_ms [responses] throttle_time_ms => INT32 - error_code => INT16 + responses => error_code error_message resource_type resource_name + error_code => INT16 + error_message => NULLABLE_STRING + resource_type => INT8 + resource_name => STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The responses for each resource. +# error_code: The resource error code. +# error_message: The resource error message, or null if there was no error. +# resource_type: The resource type. +# resource_name: The resource name. -#ApiKey: EndTxn, 26 -EndTxnRequestV0 => transactional_id producer_id producer_epoch transaction_result - transactional_id => STRING - producer_id => INT64 - producer_epoch => INT16 - transaction_result => BOOLEAN +IncrementalAlterConfigsResponseV1 => throttle_time_ms {responses} TAG_BUFFER + throttle_time_ms => INT32 + responses => error_code error_message resource_type resource_name TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + resource_type => INT8 + resource_name => COMPACT_STRING -# transactional_id: The transactional id corresponding to the transaction. -# producer_id: Current producer id in use by the transactional id. -# producer_epoch: Current epoch associated with the producer id. -# transaction_result: The result of the transaction (0 = ABORT, 1 = COMMIT) +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# responses: The responses for each resource. +# error_code: The resource error code. +# error_message: The resource error message, or null if there was no error. +# resource_type: The resource type. +# resource_name: The resource name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -EndTxnRequestV1 => transactional_id producer_id producer_epoch transaction_result - transactional_id => STRING - producer_id => INT64 - producer_epoch => INT16 - transaction_result => BOOLEAN +#ApiKey: AlterPartitionReassignments, 45 +AlterPartitionReassignmentsRequestV0 => timeout_ms {topics} TAG_BUFFER + timeout_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index {replicas} TAG_BUFFER + partition_index => INT32 + replicas => INT32 -# transactional_id: The transactional id corresponding to the transaction. -# producer_id: Current producer id in use by the transactional id. -# producer_epoch: Current epoch associated with the producer id. -# transaction_result: The result of the transaction (0 = ABORT, 1 = COMMIT) +# timeout_ms: The time in ms to wait for the request to complete. +# topics: The topics to reassign. +# name: The topic name. +# partitions: The partitions to reassign. +# partition_index: The partition index. +# replicas: The replicas to place the partitions on, or null to cancel a pending reassignment for this partition. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -EndTxnResponseV0 => throttle_time_ms error_code - throttle_time_ms => INT32 - error_code => INT16 +AlterPartitionReassignmentsRequestV1 => timeout_ms allow_replication_factor_change {topics} TAG_BUFFER + timeout_ms => INT32 + allow_replication_factor_change => BOOLEAN + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index {replicas} TAG_BUFFER + partition_index => INT32 + replicas => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code +# timeout_ms: The time in ms to wait for the request to complete. +# allow_replication_factor_change: The option indicating whether changing the replication factor of any given partition as part of this request is a valid move. +# topics: The topics to reassign. +# name: The topic name. +# partitions: The partitions to reassign. +# partition_index: The partition index. +# replicas: The replicas to place the partitions on, or null to cancel a pending reassignment for this partition. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -EndTxnResponseV1 => throttle_time_ms error_code +AlterPartitionReassignmentsResponseV0 => throttle_time_ms error_code error_message {responses} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code - - -#ApiKey: TxnOffsetCommit, 28 -TxnOffsetCommitRequestV0 => transactional_id group_id producer_id producer_epoch [topics] - transactional_id => STRING - group_id => STRING - producer_id => INT64 - producer_epoch => INT16 - topics => name [partitions] - name => STRING - partitions => partition_index committed_offset committed_metadata + error_message => COMPACT_NULLABLE_STRING + responses => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code error_message TAG_BUFFER partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING -# transactional_id: The ID of the transaction. -# group_id: The ID of the group. -# producer_id: The current producer ID in use by the transactional ID. -# producer_epoch: The current epoch associated with the producer ID. -# topics: Each topic that we want to commit offsets for. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# responses: The responses to topics to reassign. # name: The topic name. -# partitions: The partitions inside the topic that we want to commit offsets for. -# partition_index: The index of the partition within the topic. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. +# partitions: The responses to partitions to reassign. +# partition_index: The partition index. +# error_code: The error code for this partition, or 0 if there was no error. +# error_message: The error message for this partition, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -TxnOffsetCommitRequestV1 => transactional_id group_id producer_id producer_epoch [topics] - transactional_id => STRING - group_id => STRING - producer_id => INT64 - producer_epoch => INT16 - topics => name [partitions] - name => STRING - partitions => partition_index committed_offset committed_metadata +AlterPartitionReassignmentsResponseV1 => throttle_time_ms allow_replication_factor_change error_code error_message {responses} TAG_BUFFER + throttle_time_ms => INT32 + allow_replication_factor_change => BOOLEAN + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + responses => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code error_message TAG_BUFFER partition_index => INT32 - committed_offset => INT64 - committed_metadata => NULLABLE_STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING -# transactional_id: The ID of the transaction. -# group_id: The ID of the group. -# producer_id: The current producer ID in use by the transactional ID. -# producer_epoch: The current epoch associated with the producer ID. -# topics: Each topic that we want to commit offsets for. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# allow_replication_factor_change: The option indicating whether changing the replication factor of any given partition as part of the request was allowed. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# responses: The responses to topics to reassign. # name: The topic name. -# partitions: The partitions inside the topic that we want to commit offsets for. -# partition_index: The index of the partition within the topic. -# committed_offset: The message offset to be committed. -# committed_metadata: Any associated metadata the client wants to keep. +# partitions: The responses to partitions to reassign. +# partition_index: The partition index. +# error_code: The error code for this partition, or 0 if there was no error. +# error_message: The error message for this partition, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -TxnOffsetCommitRequestV2 => transactional_id group_id producer_id producer_epoch [topics] - transactional_id => STRING - group_id => STRING - producer_id => INT64 - producer_epoch => INT16 - topics => name [partitions] - name => STRING - partitions => partition_index committed_offset committed_leader_epoch committed_metadata - partition_index => INT32 - committed_offset => INT64 - committed_leader_epoch => INT32 - committed_metadata => NULLABLE_STRING +#ApiKey: ListPartitionReassignments, 46 +ListPartitionReassignmentsRequestV0 => timeout_ms {topics} TAG_BUFFER + timeout_ms => INT32 + topics => name {partition_indexes} TAG_BUFFER + name => COMPACT_STRING + partition_indexes => INT32 -# transactional_id: The ID of the transaction. -# group_id: The ID of the group. -# producer_id: The current producer ID in use by the transactional ID. -# producer_epoch: The current epoch associated with the producer ID. -# topics: Each topic that we want to commit offsets for. +# timeout_ms: The time in ms to wait for the request to complete. +# topics: The topics to list partition reassignments for, or null to list everything. # name: The topic name. -# partitions: The partitions inside the topic that we want to commit offsets for. -# partition_index: The index of the partition within the topic. -# committed_offset: The message offset to be committed. -# committed_leader_epoch: The leader epoch of the last consumed record. -# committed_metadata: Any associated metadata the client wants to keep. +# partition_indexes: The partitions to list partition reassignments for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -TxnOffsetCommitResponseV0 => throttle_time_ms [topics] +ListPartitionReassignmentsResponseV0 => throttle_time_ms error_code error_message {topics} TAG_BUFFER throttle_time_ms => INT32 - topics => name [partitions] - name => STRING - partitions => partition_index error_code + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index {replicas} {adding_replicas} {removing_replicas} TAG_BUFFER partition_index => INT32 - error_code => INT16 + replicas => INT32 + adding_replicas => INT32 + removing_replicas => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# topics: The ongoing reassignments for each topic. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partitition index. -# error_code: The error code, or 0 if there was no error. +# partitions: The ongoing reassignments for each partition. +# partition_index: The index of the partition. +# replicas: The current replica set. +# adding_replicas: The set of replicas we are currently adding. +# removing_replicas: The set of replicas we are currently removing. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -TxnOffsetCommitResponseV1 => throttle_time_ms [topics] - throttle_time_ms => INT32 +#ApiKey: OffsetDelete, 47 +OffsetDeleteRequestV0 => group_id [topics] + group_id => STRING topics => name [partitions] name => STRING - partitions => partition_index error_code + partitions => partition_index partition_index => INT32 - error_code => INT16 -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. +# group_id: The unique group identifier. +# topics: The topics to delete offsets for. # name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partitition index. -# error_code: The error code, or 0 if there was no error. +# partitions: Each partition to delete offsets for. +# partition_index: The partition index. -TxnOffsetCommitResponseV2 => throttle_time_ms [topics] +OffsetDeleteResponseV0 => error_code throttle_time_ms [topics] + error_code => INT16 throttle_time_ms => INT32 topics => name [partitions] name => STRING @@ -4363,1150 +8909,2033 @@ TxnOffsetCommitResponseV2 => throttle_time_ms [topics] partition_index => INT32 error_code => INT16 +# error_code: The top-level error code, or 0 if there was no error. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # topics: The responses for each topic. # name: The topic name. # partitions: The responses for each partition in the topic. -# partition_index: The partitition index. +# partition_index: The partition index. # error_code: The error code, or 0 if there was no error. -#ApiKey: DescribeAcls, 29 -DescribeAclsRequestV0 => resource_type resource_name principal host operation permission_type - resource_type => INT8 - resource_name => NULLABLE_STRING - principal => NULLABLE_STRING - host => NULLABLE_STRING - operation => INT8 - permission_type => INT8 - -# resource_type: The resource type -# resource_name: The resource name filter -# principal: The ACL principal filter -# host: The ACL host filter -# operation: The ACL operation -# permission_type: The ACL permission type - - -DescribeAclsRequestV1 => resource_type resource_name resource_pattern_type_filter principal host operation permission_type - resource_type => INT8 - resource_name => NULLABLE_STRING - resource_pattern_type_filter => INT8 - principal => NULLABLE_STRING - host => NULLABLE_STRING - operation => INT8 - permission_type => INT8 - -# resource_type: The resource type -# resource_name: The resource name filter -# resource_pattern_type_filter: The resource pattern type filter -# principal: The ACL principal filter -# host: The ACL host filter -# operation: The ACL operation -# permission_type: The ACL permission type +#ApiKey: DescribeClientQuotas, 48 +DescribeClientQuotasRequestV0 => [components] strict + components => entity_type match_type match + entity_type => STRING + match_type => INT8 + match => NULLABLE_STRING + strict => BOOLEAN + +# components: Filter components to apply to quota entities. +# entity_type: The entity type that the filter component applies to. +# match_type: How to match the entity {0 = exact name, 1 = default name, 2 = any specified name}. +# match: The string to match against, or null if unused for the match type. +# strict: Whether the match is strict, i.e. should exclude entities with unspecified entity types. + + +DescribeClientQuotasRequestV1 => {components} strict TAG_BUFFER + components => entity_type match_type match TAG_BUFFER + entity_type => COMPACT_STRING + match_type => INT8 + match => COMPACT_NULLABLE_STRING + strict => BOOLEAN + +# components: Filter components to apply to quota entities. +# entity_type: The entity type that the filter component applies to. +# match_type: How to match the entity {0 = exact name, 1 = default name, 2 = any specified name}. +# match: The string to match against, or null if unused for the match type. +# _tagged_fields: The tagged fields +# strict: Whether the match is strict, i.e. should exclude entities with unspecified entity types. +# _tagged_fields: The tagged fields -DescribeAclsResponseV0 => throttle_time_ms error_code error_message [resources] +DescribeClientQuotasResponseV0 => throttle_time_ms error_code error_message [entries] throttle_time_ms => INT32 error_code => INT16 error_message => NULLABLE_STRING - resources => resource_type resource_name [acls] - resource_type => INT8 - resource_name => STRING - acls => principal host operation permission_type - principal => STRING - host => STRING - operation => INT8 - permission_type => INT8 + entries => [entity] [values] + entity => entity_type entity_name + entity_type => STRING + entity_name => NULLABLE_STRING + values => key value + key => STRING + value => FLOAT64 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message -# resources: The resources and their associated ACLs. -# resource_type: The resource type -# resource_name: The resource name -# principal: The ACL principal -# host: The ACL host -# operation: The ACL operation -# permission_type: The ACL permission type +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or `0` if the quota description succeeded. +# error_message: The error message, or `null` if the quota description succeeded. +# entries: A result entry. +# entity: The quota entity description. +# entity_type: The entity type. +# entity_name: The entity name, or null if the default. +# values: The quota values for the entity. +# key: The quota configuration key. +# value: The quota configuration value. -DescribeAclsResponseV1 => throttle_time_ms error_code error_message [resources] +DescribeClientQuotasResponseV1 => throttle_time_ms error_code error_message {entries} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - error_message => NULLABLE_STRING - resources => resource_type resource_name resource_pattern_type [acls] - resource_type => INT8 - resource_name => STRING - resource_pattern_type => INT8 - acls => principal host operation permission_type - principal => STRING - host => STRING - operation => INT8 - permission_type => INT8 - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message -# resources: The resources and their associated ACLs. -# resource_type: The resource type -# resource_name: The resource name -# resource_pattern_type: The resource pattern type -# principal: The ACL principal -# host: The ACL host -# operation: The ACL operation -# permission_type: The ACL permission type - + error_message => COMPACT_NULLABLE_STRING + entries => {entity} {values} TAG_BUFFER + entity => entity_type entity_name TAG_BUFFER + entity_type => COMPACT_STRING + entity_name => COMPACT_NULLABLE_STRING + values => key value TAG_BUFFER + key => COMPACT_STRING + value => FLOAT64 -#ApiKey: CreateAcls, 30 -CreateAclsRequestV0 => [creations] - creations => resource_type resource_name principal host operation permission_type - resource_type => INT8 - resource_name => STRING - principal => STRING - host => STRING - operation => INT8 - permission_type => INT8 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or `0` if the quota description succeeded. +# error_message: The error message, or `null` if the quota description succeeded. +# entries: A result entry. +# entity: The quota entity description. +# entity_type: The entity type. +# entity_name: The entity name, or null if the default. +# _tagged_fields: The tagged fields +# values: The quota values for the entity. +# key: The quota configuration key. +# value: The quota configuration value. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -# resource_type: The resource type -# resource_name: The resource name -# principal: The ACL principal -# host: The ACL host -# operation: The ACL operation -# permission_type: The ACL permission type +#ApiKey: AlterClientQuotas, 49 +AlterClientQuotasRequestV0 => [entries] validate_only + entries => [entity] [ops] + entity => entity_type entity_name + entity_type => STRING + entity_name => NULLABLE_STRING + ops => key value remove + key => STRING + value => FLOAT64 + remove => BOOLEAN + validate_only => BOOLEAN -CreateAclsRequestV1 => [creations] - creations => resource_type resource_name resource_pattern_type principal host operation permission_type - resource_type => INT8 - resource_name => STRING - resource_pattern_type => INT8 - principal => STRING - host => STRING - operation => INT8 - permission_type => INT8 +# entries: The quota configuration entries to alter. +# entity: The quota entity to alter. +# entity_type: The entity type. +# entity_name: The name of the entity, or null if the default. +# ops: An individual quota configuration entry to alter. +# key: The quota configuration key. +# value: The value to set, otherwise ignored if the value is to be removed. +# remove: Whether the quota configuration value should be removed, otherwise set. +# validate_only: Whether the alteration should be validated, but not performed. + + +AlterClientQuotasRequestV1 => {entries} validate_only TAG_BUFFER + entries => {entity} {ops} TAG_BUFFER + entity => entity_type entity_name TAG_BUFFER + entity_type => COMPACT_STRING + entity_name => COMPACT_NULLABLE_STRING + ops => key value remove TAG_BUFFER + key => COMPACT_STRING + value => FLOAT64 + remove => BOOLEAN + validate_only => BOOLEAN -# resource_type: The resource type -# resource_name: The resource name -# resource_pattern_type: The resource pattern type -# principal: The ACL principal -# host: The ACL host -# operation: The ACL operation -# permission_type: The ACL permission type +# entries: The quota configuration entries to alter. +# entity: The quota entity to alter. +# entity_type: The entity type. +# entity_name: The name of the entity, or null if the default. +# _tagged_fields: The tagged fields +# ops: An individual quota configuration entry to alter. +# key: The quota configuration key. +# value: The value to set, otherwise ignored if the value is to be removed. +# remove: Whether the quota configuration value should be removed, otherwise set. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# validate_only: Whether the alteration should be validated, but not performed. +# _tagged_fields: The tagged fields -CreateAclsResponseV0 => throttle_time_ms [creation_responses] +AlterClientQuotasResponseV0 => throttle_time_ms [entries] throttle_time_ms => INT32 - creation_responses => error_code error_message + entries => error_code error_message [entity] error_code => INT16 error_message => NULLABLE_STRING + entity => entity_type entity_name + entity_type => STRING + entity_name => NULLABLE_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# entries: The quota configuration entries to alter. +# error_code: The error code, or `0` if the quota alteration succeeded. +# error_message: The error message, or `null` if the quota alteration succeeded. +# entity: The quota entity to alter. +# entity_type: The entity type. +# entity_name: The name of the entity, or null if the default. -CreateAclsResponseV1 => throttle_time_ms [creation_responses] +AlterClientQuotasResponseV1 => throttle_time_ms {entries} TAG_BUFFER throttle_time_ms => INT32 - creation_responses => error_code error_message + entries => error_code error_message {entity} TAG_BUFFER error_code => INT16 - error_message => NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + entity => entity_type entity_name TAG_BUFFER + entity_type => COMPACT_STRING + entity_name => COMPACT_NULLABLE_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# entries: The quota configuration entries to alter. +# error_code: The error code, or `0` if the quota alteration succeeded. +# error_message: The error message, or `null` if the quota alteration succeeded. +# entity: The quota entity to alter. +# entity_type: The entity type. +# entity_name: The name of the entity, or null if the default. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: DeleteAcls, 31 -DeleteAclsRequestV0 => [filters] - filters => resource_type resource_name principal host operation permission_type - resource_type => INT8 - resource_name => NULLABLE_STRING - principal => NULLABLE_STRING - host => NULLABLE_STRING - operation => INT8 - permission_type => INT8 +#ApiKey: DescribeUserScramCredentials, 50 +DescribeUserScramCredentialsRequestV0 => {users} TAG_BUFFER + users => name TAG_BUFFER + name => COMPACT_STRING -# resource_type: The resource type -# resource_name: The resource name filter -# principal: The ACL principal filter -# host: The ACL host filter -# operation: The ACL operation -# permission_type: The ACL permission type +# users: The users to describe, or null/empty to describe all users. +# name: The user name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DeleteAclsRequestV1 => [filters] - filters => resource_type resource_name resource_pattern_type_filter principal host operation permission_type - resource_type => INT8 - resource_name => NULLABLE_STRING - resource_pattern_type_filter => INT8 - principal => NULLABLE_STRING - host => NULLABLE_STRING - operation => INT8 - permission_type => INT8 +DescribeUserScramCredentialsResponseV0 => throttle_time_ms error_code error_message {results} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + results => user error_code error_message {credential_infos} TAG_BUFFER + user => COMPACT_STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + credential_infos => mechanism iterations TAG_BUFFER + mechanism => INT8 + iterations => INT32 -# resource_type: The resource type -# resource_name: The resource name filter -# resource_pattern_type_filter: The resource pattern type filter -# principal: The ACL principal filter -# host: The ACL host filter -# operation: The ACL operation -# permission_type: The ACL permission type +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The message-level error code, 0 except for user authorization or infrastructure issues. +# error_message: The message-level error message, if any. +# results: The results for descriptions, one per user. +# user: The user name. +# error_code: The user-level error code. +# error_message: The user-level error message, if any. +# credential_infos: The mechanism and related information associated with the user's SCRAM credentials. +# mechanism: The SCRAM mechanism. +# iterations: The number of iterations used in the SCRAM credential. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: AlterUserScramCredentials, 51 +AlterUserScramCredentialsRequestV0 => {deletions} {upsertions} TAG_BUFFER + deletions => name mechanism TAG_BUFFER + name => COMPACT_STRING + mechanism => INT8 + upsertions => name mechanism iterations salt salted_password TAG_BUFFER + name => COMPACT_STRING + mechanism => INT8 + iterations => INT32 + salt => COMPACT_BYTES + salted_password => COMPACT_BYTES + +# deletions: The SCRAM credentials to remove. +# name: The user name. +# mechanism: The SCRAM mechanism. +# _tagged_fields: The tagged fields +# upsertions: The SCRAM credentials to update/insert. +# name: The user name. +# mechanism: The SCRAM mechanism. +# iterations: The number of iterations. +# salt: A random salt generated by the client. +# salted_password: The salted password. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DeleteAclsResponseV0 => throttle_time_ms [filter_responses] +AlterUserScramCredentialsResponseV0 => throttle_time_ms {results} TAG_BUFFER throttle_time_ms => INT32 - filter_responses => error_code error_message [matching_acls] + results => user error_code error_message TAG_BUFFER + user => COMPACT_STRING error_code => INT16 - error_message => NULLABLE_STRING - matching_acls => error_code error_message resource_type resource_name principal host operation permission_type - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING - principal => STRING - host => STRING - operation => INT8 - permission_type => INT8 + error_message => COMPACT_NULLABLE_STRING + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# results: The results for deletions and alterations, one per affected user. +# user: The user name. +# error_code: The error code. +# error_message: The error message, if any. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: FetchSnapshot, 59 +FetchSnapshotRequestV0 => replica_id max_bytes {topics} TAG_BUFFER + replica_id => INT32 + max_bytes => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition current_leader_epoch snapshot_id position TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + snapshot_id => end_offset epoch TAG_BUFFER + end_offset => INT64 + epoch => INT32 + position => INT64 + +# replica_id: The broker ID of the follower. +# max_bytes: The maximum bytes to fetch from all of the snapshots. +# topics: The topics to fetch. +# name: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition, -1 for unknown leader epoch. +# snapshot_id: The snapshot endOffset and epoch to fetch. +# end_offset: The end offset of the snapshot. +# epoch: The epoch of the snapshot. +# _tagged_fields: The tagged fields +# position: The byte position within the snapshot to start fetching from. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message -# matching_acls: The matching ACLs -# error_code: Response error code -# error_message: Response error message -# resource_type: The resource type -# resource_name: The resource name -# principal: The ACL principal -# host: The ACL host -# operation: The ACL operation -# permission_type: The ACL permission type +FetchSnapshotRequestV1 => replica_id max_bytes {topics} TAG_BUFFER + replica_id => INT32 + max_bytes => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition current_leader_epoch snapshot_id position TAG_BUFFER + partition => INT32 + current_leader_epoch => INT32 + snapshot_id => end_offset epoch TAG_BUFFER + end_offset => INT64 + epoch => INT32 + position => INT64 + +# replica_id: The broker ID of the follower. +# max_bytes: The maximum bytes to fetch from all of the snapshots. +# topics: The topics to fetch. +# name: The name of the topic to fetch. +# partitions: The partitions to fetch. +# partition: The partition index. +# current_leader_epoch: The current leader epoch of the partition, -1 for unknown leader epoch. +# snapshot_id: The snapshot endOffset and epoch to fetch. +# end_offset: The end offset of the snapshot. +# epoch: The epoch of the snapshot. +# _tagged_fields: The tagged fields +# position: The byte position within the snapshot to start fetching from. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DeleteAclsResponseV1 => throttle_time_ms [filter_responses] +FetchSnapshotResponseV0 => throttle_time_ms error_code {topics} TAG_BUFFER throttle_time_ms => INT32 - filter_responses => error_code error_message [matching_acls] - error_code => INT16 - error_message => NULLABLE_STRING - matching_acls => error_code error_message resource_type resource_name resource_pattern_type principal host operation permission_type + error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => index error_code snapshot_id size position unaligned_records TAG_BUFFER + index => INT32 error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING - resource_pattern_type => INT8 - principal => STRING - host => STRING - operation => INT8 - permission_type => INT8 + snapshot_id => end_offset epoch TAG_BUFFER + end_offset => INT64 + epoch => INT32 + size => INT64 + position => INT64 + unaligned_records => COMPACT_RECORDS + +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# topics: The topics to fetch. +# name: The name of the topic to fetch. +# partitions: The partitions to fetch. +# index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# snapshot_id: The snapshot endOffset and epoch fetched. +# end_offset: The snapshot end offset. +# epoch: The snapshot epoch. +# _tagged_fields: The tagged fields +# size: The total size of the snapshot. +# position: The starting byte position within the snapshot included in the Bytes field. +# unaligned_records: Snapshot data in records format which may not be aligned on an offset boundary. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +FetchSnapshotResponseV1 => throttle_time_ms error_code {topics} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => index error_code snapshot_id size position unaligned_records TAG_BUFFER + index => INT32 + error_code => INT16 + snapshot_id => end_offset epoch TAG_BUFFER + end_offset => INT64 + epoch => INT32 + size => INT64 + position => INT64 + unaligned_records => COMPACT_RECORDS -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message -# matching_acls: The matching ACLs -# error_code: Response error code -# error_message: Response error message -# resource_type: The resource type -# resource_name: The resource name -# resource_pattern_type: The resource pattern type -# principal: The ACL principal -# host: The ACL host -# operation: The ACL operation -# permission_type: The ACL permission type +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# topics: The topics to fetch. +# name: The name of the topic to fetch. +# partitions: The partitions to fetch. +# index: The partition index. +# error_code: The error code, or 0 if there was no fetch error. +# snapshot_id: The snapshot endOffset and epoch fetched. +# end_offset: The snapshot end offset. +# epoch: The snapshot epoch. +# _tagged_fields: The tagged fields +# size: The total size of the snapshot. +# position: The starting byte position within the snapshot included in the Bytes field. +# unaligned_records: Snapshot data in records format which may not be aligned on an offset boundary. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: DescribeConfigs, 32 -DescribeConfigsRequestV0 => [resources] - resources => resource_type resource_name [config_names] - resource_type => INT8 - resource_name => STRING - config_names => STRING +#ApiKey: DescribeCluster, 60 +DescribeClusterRequestV0 => include_cluster_authorized_operations TAG_BUFFER + include_cluster_authorized_operations => BOOLEAN -# resources: An array of config resources to be returned. +# include_cluster_authorized_operations: Whether to include cluster authorized operations. +# _tagged_fields: The tagged fields -DescribeConfigsRequestV1 => [resources] include_synonyms - resources => resource_type resource_name [config_names] - resource_type => INT8 - resource_name => STRING - config_names => STRING - include_synonyms => BOOLEAN +DescribeClusterRequestV1 => include_cluster_authorized_operations endpoint_type TAG_BUFFER + include_cluster_authorized_operations => BOOLEAN + endpoint_type => INT8 -# resources: An array of config resources to be returned. +# include_cluster_authorized_operations: Whether to include cluster authorized operations. +# endpoint_type: The endpoint type to describe. 1=brokers, 2=controllers. +# _tagged_fields: The tagged fields -DescribeConfigsRequestV2 => [resources] include_synonyms - resources => resource_type resource_name [config_names] - resource_type => INT8 - resource_name => STRING - config_names => STRING - include_synonyms => BOOLEAN +DescribeClusterRequestV2 => include_cluster_authorized_operations endpoint_type include_fenced_brokers TAG_BUFFER + include_cluster_authorized_operations => BOOLEAN + endpoint_type => INT8 + include_fenced_brokers => BOOLEAN -# resources: An array of config resources to be returned. +# include_cluster_authorized_operations: Whether to include cluster authorized operations. +# endpoint_type: The endpoint type to describe. 1=brokers, 2=controllers. +# include_fenced_brokers: Whether to include fenced brokers when listing brokers. +# _tagged_fields: The tagged fields -DescribeConfigsResponseV0 => throttle_time_ms [resources] +DescribeClusterResponseV0 => throttle_time_ms error_code error_message cluster_id controller_id {brokers} cluster_authorized_operations TAG_BUFFER throttle_time_ms => INT32 - resources => error_code error_message resource_type resource_name [config_entries] - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING - config_entries => config_name config_value read_only is_default is_sensitive - config_name => STRING - config_value => NULLABLE_STRING - read_only => BOOLEAN - is_default => BOOLEAN - is_sensitive => BOOLEAN + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + cluster_id => COMPACT_STRING + controller_id => INT32 + brokers => broker_id host port rack TAG_BUFFER + broker_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_authorized_operations => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# brokers: Each broker in the response. +# broker_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. +# _tagged_fields: The tagged fields -DescribeConfigsResponseV1 => throttle_time_ms [resources] +DescribeClusterResponseV1 => throttle_time_ms error_code error_message endpoint_type cluster_id controller_id {brokers} cluster_authorized_operations TAG_BUFFER throttle_time_ms => INT32 - resources => error_code error_message resource_type resource_name [config_entries] - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING - config_entries => config_name config_value read_only config_source is_sensitive [config_synonyms] - config_name => STRING - config_value => NULLABLE_STRING - read_only => BOOLEAN - config_source => INT8 - is_sensitive => BOOLEAN - config_synonyms => config_name config_value config_source - config_name => STRING - config_value => NULLABLE_STRING - config_source => INT8 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + endpoint_type => INT8 + cluster_id => COMPACT_STRING + controller_id => INT32 + brokers => broker_id host port rack TAG_BUFFER + broker_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + cluster_authorized_operations => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# endpoint_type: The endpoint type that was described. 1=brokers, 2=controllers. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# brokers: Each broker in the response. +# broker_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. +# _tagged_fields: The tagged fields -DescribeConfigsResponseV2 => throttle_time_ms [resources] +DescribeClusterResponseV2 => throttle_time_ms error_code error_message endpoint_type cluster_id controller_id {brokers} cluster_authorized_operations TAG_BUFFER throttle_time_ms => INT32 - resources => error_code error_message resource_type resource_name [config_entries] - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING - config_entries => config_name config_value read_only config_source is_sensitive [config_synonyms] - config_name => STRING - config_value => NULLABLE_STRING - read_only => BOOLEAN - config_source => INT8 - is_sensitive => BOOLEAN - config_synonyms => config_name config_value config_source - config_name => STRING - config_value => NULLABLE_STRING - config_source => INT8 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + endpoint_type => INT8 + cluster_id => COMPACT_STRING + controller_id => INT32 + brokers => broker_id host port rack is_fenced TAG_BUFFER + broker_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING + is_fenced => BOOLEAN + cluster_authorized_operations => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# endpoint_type: The endpoint type that was described. 1=brokers, 2=controllers. +# cluster_id: The cluster ID that responding broker belongs to. +# controller_id: The ID of the controller broker. +# brokers: Each broker in the response. +# broker_id: The broker ID. +# host: The broker hostname. +# port: The broker port. +# rack: The rack of the broker, or null if it has not been assigned to a rack. +# is_fenced: Whether the broker is fenced +# _tagged_fields: The tagged fields +# cluster_authorized_operations: 32-bit bitfield to represent authorized operations for this cluster. +# _tagged_fields: The tagged fields -#ApiKey: AlterConfigs, 33 -AlterConfigsRequestV0 => [resources] validate_only - resources => resource_type resource_name [config_entries] - resource_type => INT8 - resource_name => STRING - config_entries => config_name config_value - config_name => STRING - config_value => NULLABLE_STRING - validate_only => BOOLEAN +#ApiKey: DescribeProducers, 61 +DescribeProducersRequestV0 => {topics} TAG_BUFFER + topics => name {partition_indexes} TAG_BUFFER + name => COMPACT_STRING + partition_indexes => INT32 -# resources: An array of resources to update with the provided configs. -# config_name: Configuration name -# config_value: Configuration value +# topics: The topics to list producers for. +# name: The topic name. +# partition_indexes: The indexes of the partitions to list producers for. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -AlterConfigsRequestV1 => [resources] validate_only - resources => resource_type resource_name [config_entries] - resource_type => INT8 - resource_name => STRING - config_entries => config_name config_value - config_name => STRING - config_value => NULLABLE_STRING - validate_only => BOOLEAN +DescribeProducersResponseV0 => throttle_time_ms {topics} TAG_BUFFER + throttle_time_ms => INT32 + topics => name {partitions} TAG_BUFFER + name => COMPACT_STRING + partitions => partition_index error_code error_message {active_producers} TAG_BUFFER + partition_index => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + active_producers => producer_id producer_epoch last_sequence last_timestamp coordinator_epoch current_txn_start_offset TAG_BUFFER + producer_id => INT64 + producer_epoch => INT32 + last_sequence => INT32 + last_timestamp => INT64 + coordinator_epoch => INT32 + current_txn_start_offset => INT64 -# resources: An array of resources to update with the provided configs. -# config_name: Configuration name -# config_value: Configuration value +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic in the response. +# name: The topic name. +# partitions: Each partition in the response. +# partition_index: The partition index. +# error_code: The partition error code, or 0 if there was no error. +# error_message: The partition error message, which may be null if no additional details are available. +# active_producers: The active producers for the partition. +# producer_id: The producer id. +# producer_epoch: The producer epoch. +# last_sequence: The last sequence number sent by the producer. +# last_timestamp: The last timestamp sent by the producer. +# coordinator_epoch: The current epoch of the producer group. +# current_txn_start_offset: The current transaction start offset of the producer. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -AlterConfigsResponseV0 => throttle_time_ms [resources] - throttle_time_ms => INT32 - resources => error_code error_message resource_type resource_name - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING +#ApiKey: UnregisterBroker, 64 +UnregisterBrokerRequestV0 => broker_id TAG_BUFFER + broker_id => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# broker_id: The broker ID to unregister. +# _tagged_fields: The tagged fields -AlterConfigsResponseV1 => throttle_time_ms [resources] +UnregisterBrokerResponseV0 => throttle_time_ms error_code error_message TAG_BUFFER throttle_time_ms => INT32 - resources => error_code error_message resource_type resource_name - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# error_message: The top-level error message, or `null` if there was no top-level error. +# _tagged_fields: The tagged fields -#ApiKey: AlterReplicaLogDirs, 34 -AlterReplicaLogDirsRequestV0 => [log_dirs] - log_dirs => log_dir [topics] - log_dir => STRING - topics => topic [partitions] - topic => STRING - partitions => INT32 +#ApiKey: DescribeTransactions, 65 +DescribeTransactionsRequestV0 => {transactional_ids} TAG_BUFFER + transactional_ids => COMPACT_STRING -# log_dir: The absolute log directory path. -# topic: Name of topic -# partitions: List of partition ids of the topic. +# transactional_ids: Array of transactionalIds to include in describe results. If empty, then no results will be returned. +# _tagged_fields: The tagged fields -AlterReplicaLogDirsRequestV1 => [log_dirs] - log_dirs => log_dir [topics] - log_dir => STRING - topics => topic [partitions] - topic => STRING +DescribeTransactionsResponseV0 => throttle_time_ms {transaction_states} TAG_BUFFER + throttle_time_ms => INT32 + transaction_states => error_code transactional_id transaction_state transaction_timeout_ms transaction_start_time_ms producer_id producer_epoch {topics} TAG_BUFFER + error_code => INT16 + transactional_id => COMPACT_STRING + transaction_state => COMPACT_STRING + transaction_timeout_ms => INT32 + transaction_start_time_ms => INT64 + producer_id => INT64 + producer_epoch => INT16 + topics => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING partitions => INT32 -# log_dir: The absolute log directory path. -# topic: Name of topic -# partitions: List of partition ids of the topic. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# transaction_states: The current state of the transaction. +# error_code: The error code. +# transactional_id: The transactional id. +# transaction_state: The current transaction state of the producer. +# transaction_timeout_ms: The timeout in milliseconds for the transaction. +# transaction_start_time_ms: The start time of the transaction in milliseconds. +# producer_id: The current producer id associated with the transaction. +# producer_epoch: The current epoch associated with the producer id. +# topics: The set of partitions included in the current transaction (if active). When a transaction is preparing to commit or abort, this will include only partitions which do not have markers. +# topic: The topic name. +# partitions: The partition ids included in the current transaction. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -AlterReplicaLogDirsResponseV0 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition error_code - partition => INT32 - error_code => INT16 +#ApiKey: ListTransactions, 66 +ListTransactionsRequestV0 => {state_filters} {producer_id_filters} TAG_BUFFER + state_filters => COMPACT_STRING + producer_id_filters => INT64 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code +# state_filters: The transaction states to filter by: if empty, all transactions are returned; if non-empty, then only transactions matching one of the filtered states will be returned. +# producer_id_filters: The producerIds to filter by: if empty, all transactions will be returned; if non-empty, only transactions which match one of the filtered producerIds will be returned. +# _tagged_fields: The tagged fields -AlterReplicaLogDirsResponseV1 => throttle_time_ms [topics] - throttle_time_ms => INT32 - topics => topic [partitions] - topic => STRING - partitions => partition error_code - partition => INT32 - error_code => INT16 +ListTransactionsRequestV1 => {state_filters} {producer_id_filters} duration_filter TAG_BUFFER + state_filters => COMPACT_STRING + producer_id_filters => INT64 + duration_filter => INT64 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic: Name of topic -# partition: Topic partition id -# error_code: Response error code +# state_filters: The transaction states to filter by: if empty, all transactions are returned; if non-empty, then only transactions matching one of the filtered states will be returned. +# producer_id_filters: The producerIds to filter by: if empty, all transactions will be returned; if non-empty, only transactions which match one of the filtered producerIds will be returned. +# duration_filter: Duration (in millis) to filter by: if < 0, all transactions will be returned; otherwise, only transactions running longer than this duration will be returned. +# _tagged_fields: The tagged fields -#ApiKey: DescribeLogDirs, 35 -DescribeLogDirsRequestV0 => [topics] - topics => topic [partitions] - topic => STRING - partitions => INT32 +ListTransactionsRequestV2 => {state_filters} {producer_id_filters} duration_filter transactional_id_pattern TAG_BUFFER + state_filters => COMPACT_STRING + producer_id_filters => INT64 + duration_filter => INT64 + transactional_id_pattern => COMPACT_NULLABLE_STRING -# topic: Name of topic -# partitions: List of partition ids of the topic. +# state_filters: The transaction states to filter by: if empty, all transactions are returned; if non-empty, then only transactions matching one of the filtered states will be returned. +# producer_id_filters: The producerIds to filter by: if empty, all transactions will be returned; if non-empty, only transactions which match one of the filtered producerIds will be returned. +# duration_filter: Duration (in millis) to filter by: if < 0, all transactions will be returned; otherwise, only transactions running longer than this duration will be returned. +# transactional_id_pattern: The transactional ID regular expression pattern to filter by: if it is empty or null, all transactions are returned; Otherwise then only the transactions matching the given regular expression will be returned. +# _tagged_fields: The tagged fields -DescribeLogDirsRequestV1 => [topics] - topics => topic [partitions] - topic => STRING - partitions => INT32 +ListTransactionsResponseV0 => throttle_time_ms error_code {unknown_state_filters} {transaction_states} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + unknown_state_filters => COMPACT_STRING + transaction_states => transactional_id producer_id transaction_state TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + transaction_state => COMPACT_STRING -# topic: Name of topic -# partitions: List of partition ids of the topic. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# unknown_state_filters: Set of state filters provided in the request which were unknown to the transaction coordinator. +# transaction_states: The current state of the transaction for the transactional id. +# transactional_id: The transactional id. +# producer_id: The producer id. +# transaction_state: The current transaction state of the producer. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DescribeLogDirsResponseV0 => throttle_time_ms [log_dirs] +ListTransactionsResponseV1 => throttle_time_ms error_code {unknown_state_filters} {transaction_states} TAG_BUFFER throttle_time_ms => INT32 - log_dirs => error_code log_dir [topics] - error_code => INT16 - log_dir => STRING - topics => topic [partitions] - topic => STRING - partitions => partition size offset_lag is_future - partition => INT32 - size => INT64 - offset_lag => INT64 - is_future => BOOLEAN + error_code => INT16 + unknown_state_filters => COMPACT_STRING + transaction_states => transactional_id producer_id transaction_state TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + transaction_state => COMPACT_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# log_dir: The absolute log directory path. -# topic: Name of topic -# partition: Topic partition id -# size: The size of the log segments of the partition in bytes. -# offset_lag: The lag of the log's LEO w.r.t. partition's HW (if it is the current log for the partition) or current replica's LEO (if it is the future log for the partition) -# is_future: True if this log is created by AlterReplicaLogDirsRequest and will replace the current log of the replica in the future. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# unknown_state_filters: Set of state filters provided in the request which were unknown to the transaction coordinator. +# transaction_states: The current state of the transaction for the transactional id. +# transactional_id: The transactional id. +# producer_id: The producer id. +# transaction_state: The current transaction state of the producer. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DescribeLogDirsResponseV1 => throttle_time_ms [log_dirs] +ListTransactionsResponseV2 => throttle_time_ms error_code {unknown_state_filters} {transaction_states} TAG_BUFFER throttle_time_ms => INT32 - log_dirs => error_code log_dir [topics] - error_code => INT16 - log_dir => STRING - topics => topic [partitions] - topic => STRING - partitions => partition size offset_lag is_future - partition => INT32 - size => INT64 - offset_lag => INT64 - is_future => BOOLEAN + error_code => INT16 + unknown_state_filters => COMPACT_STRING + transaction_states => transactional_id producer_id transaction_state TAG_BUFFER + transactional_id => COMPACT_STRING + producer_id => INT64 + transaction_state => COMPACT_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# error_code: Response error code -# log_dir: The absolute log directory path. -# topic: Name of topic -# partition: Topic partition id -# size: The size of the log segments of the partition in bytes. -# offset_lag: The lag of the log's LEO w.r.t. partition's HW (if it is the current log for the partition) or current replica's LEO (if it is the future log for the partition) -# is_future: True if this log is created by AlterReplicaLogDirsRequest and will replace the current log of the replica in the future. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# unknown_state_filters: Set of state filters provided in the request which were unknown to the transaction coordinator. +# transaction_states: The current state of the transaction for the transactional id. +# transactional_id: The transactional id. +# producer_id: The producer id. +# transaction_state: The current transaction state of the producer. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: SaslAuthenticate, 36 -SaslAuthenticateRequestV0 => auth_bytes - auth_bytes => BYTES +#ApiKey: ConsumerGroupHeartbeat, 68 +ConsumerGroupHeartbeatRequestV0 => group_id member_id member_epoch instance_id rack_id rebalance_timeout_ms {subscribed_topic_names} server_assignor {topic_partitions} TAG_BUFFER + group_id => COMPACT_STRING + member_id => COMPACT_STRING + member_epoch => INT32 + instance_id => COMPACT_NULLABLE_STRING + rack_id => COMPACT_NULLABLE_STRING + rebalance_timeout_ms => INT32 + subscribed_topic_names => COMPACT_STRING + server_assignor => COMPACT_NULLABLE_STRING + topic_partitions => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 -# auth_bytes: The SASL authentication bytes from the client, as defined by the SASL mechanism. +# group_id: The group identifier. +# member_id: The member id generated by the consumer. The member id must be kept during the entire lifetime of the consumer process. +# member_epoch: The current member epoch; 0 to join the group; -1 to leave the group; -2 to indicate that the static member will rejoin. +# instance_id: null if not provided or if it didn't change since the last heartbeat; the instance Id otherwise. +# rack_id: null if not provided or if it didn't change since the last heartbeat; the rack ID of consumer otherwise. +# rebalance_timeout_ms: -1 if it didn't change since the last heartbeat; the maximum time in milliseconds that the coordinator will wait on the member to revoke its partitions otherwise. +# subscribed_topic_names: null if it didn't change since the last heartbeat; the subscribed topic names otherwise. +# server_assignor: null if not used or if it didn't change since the last heartbeat; the server side assignor to use otherwise. +# topic_partitions: null if it didn't change since the last heartbeat; the partitions owned by the member. +# topic_id: The topic ID. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SaslAuthenticateRequestV1 => auth_bytes - auth_bytes => BYTES +ConsumerGroupHeartbeatRequestV1 => group_id member_id member_epoch instance_id rack_id rebalance_timeout_ms {subscribed_topic_names} subscribed_topic_regex server_assignor {topic_partitions} TAG_BUFFER + group_id => COMPACT_STRING + member_id => COMPACT_STRING + member_epoch => INT32 + instance_id => COMPACT_NULLABLE_STRING + rack_id => COMPACT_NULLABLE_STRING + rebalance_timeout_ms => INT32 + subscribed_topic_names => COMPACT_STRING + subscribed_topic_regex => COMPACT_NULLABLE_STRING + server_assignor => COMPACT_NULLABLE_STRING + topic_partitions => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 -# auth_bytes: The SASL authentication bytes from the client, as defined by the SASL mechanism. +# group_id: The group identifier. +# member_id: The member id generated by the consumer. The member id must be kept during the entire lifetime of the consumer process. +# member_epoch: The current member epoch; 0 to join the group; -1 to leave the group; -2 to indicate that the static member will rejoin. +# instance_id: null if not provided or if it didn't change since the last heartbeat; the instance Id otherwise. +# rack_id: null if not provided or if it didn't change since the last heartbeat; the rack ID of consumer otherwise. +# rebalance_timeout_ms: -1 if it didn't change since the last heartbeat; the maximum time in milliseconds that the coordinator will wait on the member to revoke its partitions otherwise. +# subscribed_topic_names: null if it didn't change since the last heartbeat; the subscribed topic names otherwise. +# subscribed_topic_regex: null if it didn't change since the last heartbeat; the subscribed topic regex otherwise. +# server_assignor: null if not used or if it didn't change since the last heartbeat; the server side assignor to use otherwise. +# topic_partitions: null if it didn't change since the last heartbeat; the partitions owned by the member. +# topic_id: The topic ID. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SaslAuthenticateResponseV0 => error_code error_message auth_bytes +ConsumerGroupHeartbeatResponseV0 => throttle_time_ms error_code error_message member_id member_epoch heartbeat_interval_ms assignment TAG_BUFFER + throttle_time_ms => INT32 error_code => INT16 - error_message => NULLABLE_STRING - auth_bytes => BYTES + error_message => COMPACT_NULLABLE_STRING + member_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + heartbeat_interval_ms => INT32 + assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. -# auth_bytes: The SASL authentication bytes from the server, as defined by the SASL mechanism. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# member_id: The member id is generated by the consumer starting from version 1, while in version 0, it can be provided by users or generated by the group coordinator. +# member_epoch: The member epoch. +# heartbeat_interval_ms: The heartbeat interval in milliseconds. +# assignment: null if not provided; the assignment otherwise. +# topic_partitions: The partitions assigned to the member that can be used immediately. +# topic_id: The topic ID. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -SaslAuthenticateResponseV1 => error_code error_message auth_bytes session_lifetime_ms +ConsumerGroupHeartbeatResponseV1 => throttle_time_ms error_code error_message member_id member_epoch heartbeat_interval_ms assignment TAG_BUFFER + throttle_time_ms => INT32 error_code => INT16 - error_message => NULLABLE_STRING - auth_bytes => BYTES - session_lifetime_ms => INT64 + error_message => COMPACT_NULLABLE_STRING + member_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + heartbeat_interval_ms => INT32 + assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 -# error_code: The error code, or 0 if there was no error. -# error_message: The error message, or null if there was no error. -# auth_bytes: The SASL authentication bytes from the server, as defined by the SASL mechanism. -# session_lifetime_ms: The SASL authentication bytes from the server, as defined by the SASL mechanism. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# member_id: The member id is generated by the consumer starting from version 1, while in version 0, it can be provided by users or generated by the group coordinator. +# member_epoch: The member epoch. +# heartbeat_interval_ms: The heartbeat interval in milliseconds. +# assignment: null if not provided; the assignment otherwise. +# topic_partitions: The partitions assigned to the member that can be used immediately. +# topic_id: The topic ID. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: CreatePartitions, 37 -CreatePartitionsRequestV0 => [topic_partitions] timeout validate_only - topic_partitions => topic new_partitions - topic => STRING - new_partitions => count [assignment] - count => INT32 - assignment => ARRAY(INT32) - timeout => INT32 - validate_only => BOOLEAN +#ApiKey: ConsumerGroupDescribe, 69 +ConsumerGroupDescribeRequestV0 => {group_ids} include_authorized_operations TAG_BUFFER + group_ids => COMPACT_STRING + include_authorized_operations => BOOLEAN -# topic_partitions: List of topic and the corresponding new partitions. -# topic: Name of topic -# count: The new partition count. -# assignment: The assigned brokers. -# timeout: The time in ms to wait for the partitions to be created. -# validate_only: If true then validate the request, but don't actually increase the number of partitions. +# group_ids: The ids of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. +# _tagged_fields: The tagged fields -CreatePartitionsRequestV1 => [topic_partitions] timeout validate_only - topic_partitions => topic new_partitions - topic => STRING - new_partitions => count [assignment] - count => INT32 - assignment => ARRAY(INT32) - timeout => INT32 - validate_only => BOOLEAN +ConsumerGroupDescribeRequestV1 => {group_ids} include_authorized_operations TAG_BUFFER + group_ids => COMPACT_STRING + include_authorized_operations => BOOLEAN -# topic_partitions: List of topic and the corresponding new partitions. -# topic: Name of topic -# count: The new partition count. -# assignment: The assigned brokers. -# timeout: The time in ms to wait for the partitions to be created. -# validate_only: If true then validate the request, but don't actually increase the number of partitions. +# group_ids: The ids of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. +# _tagged_fields: The tagged fields -CreatePartitionsResponseV0 => throttle_time_ms [topic_errors] +ConsumerGroupDescribeResponseV0 => throttle_time_ms {groups} TAG_BUFFER throttle_time_ms => INT32 - topic_errors => topic error_code error_message - topic => STRING + groups => error_code error_message group_id group_state group_epoch assignment_epoch assignor_name {members} authorized_operations TAG_BUFFER error_code => INT16 - error_message => NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + group_id => COMPACT_STRING + group_state => COMPACT_STRING + group_epoch => INT32 + assignment_epoch => INT32 + assignor_name => COMPACT_STRING + members => member_id instance_id rack_id member_epoch client_id client_host {subscribed_topic_names} subscribed_topic_regex assignment target_assignment TAG_BUFFER + member_id => COMPACT_STRING + instance_id => COMPACT_NULLABLE_STRING + rack_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + client_id => COMPACT_STRING + client_host => COMPACT_STRING + subscribed_topic_names => COMPACT_STRING + subscribed_topic_regex => COMPACT_NULLABLE_STRING + assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id topic_name {partitions} TAG_BUFFER + topic_id => UUID + topic_name => COMPACT_STRING + partitions => INT32 + target_assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id topic_name {partitions} TAG_BUFFER + topic_id => UUID + topic_name => COMPACT_STRING + partitions => INT32 + authorized_operations => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic_errors: Per topic results for the create partitions request -# topic: Name of topic -# error_code: Response error code -# error_message: Response error message +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# group_epoch: The group epoch. +# assignment_epoch: The assignment epoch. +# assignor_name: The selected assignor. +# members: The members. +# member_id: The member ID. +# instance_id: The member instance ID. +# rack_id: The member rack ID. +# member_epoch: The current member epoch. +# client_id: The client ID. +# client_host: The client host. +# subscribed_topic_names: The subscribed topic names. +# subscribed_topic_regex: the subscribed topic regex otherwise or null of not provided. +# assignment: The current assignment. +# topic_partitions: The assigned topic-partitions to the member. +# topic_id: The topic ID. +# topic_name: The topic name. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# target_assignment: The target assignment. +# _tagged_fields: The tagged fields +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -CreatePartitionsResponseV1 => throttle_time_ms [topic_errors] +ConsumerGroupDescribeResponseV1 => throttle_time_ms {groups} TAG_BUFFER throttle_time_ms => INT32 - topic_errors => topic error_code error_message - topic => STRING + groups => error_code error_message group_id group_state group_epoch assignment_epoch assignor_name {members} authorized_operations TAG_BUFFER error_code => INT16 - error_message => NULLABLE_STRING - -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to quota violation (Zero if the request did not violate any quota) -# topic_errors: Per topic results for the create partitions request -# topic: Name of topic -# error_code: Response error code -# error_message: Response error message + error_message => COMPACT_NULLABLE_STRING + group_id => COMPACT_STRING + group_state => COMPACT_STRING + group_epoch => INT32 + assignment_epoch => INT32 + assignor_name => COMPACT_STRING + members => member_id instance_id rack_id member_epoch client_id client_host {subscribed_topic_names} subscribed_topic_regex assignment target_assignment member_type TAG_BUFFER + member_id => COMPACT_STRING + instance_id => COMPACT_NULLABLE_STRING + rack_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + client_id => COMPACT_STRING + client_host => COMPACT_STRING + subscribed_topic_names => COMPACT_STRING + subscribed_topic_regex => COMPACT_NULLABLE_STRING + assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id topic_name {partitions} TAG_BUFFER + topic_id => UUID + topic_name => COMPACT_STRING + partitions => INT32 + target_assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id topic_name {partitions} TAG_BUFFER + topic_id => UUID + topic_name => COMPACT_STRING + partitions => INT32 + member_type => INT8 + authorized_operations => INT32 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# group_epoch: The group epoch. +# assignment_epoch: The assignment epoch. +# assignor_name: The selected assignor. +# members: The members. +# member_id: The member ID. +# instance_id: The member instance ID. +# rack_id: The member rack ID. +# member_epoch: The current member epoch. +# client_id: The client ID. +# client_host: The client host. +# subscribed_topic_names: The subscribed topic names. +# subscribed_topic_regex: the subscribed topic regex otherwise or null of not provided. +# assignment: The current assignment. +# topic_partitions: The assigned topic-partitions to the member. +# topic_id: The topic ID. +# topic_name: The topic name. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# target_assignment: The target assignment. +# member_type: -1 for unknown. 0 for classic member. +1 for consumer member. +# _tagged_fields: The tagged fields +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: CreateDelegationToken, 38 -CreateDelegationTokenRequestV0 => [renewers] max_lifetime_ms - renewers => principal_type principal_name - principal_type => STRING - principal_name => STRING - max_lifetime_ms => INT64 -# renewers: A list of those who are allowed to renew this token before it expires. -# principal_type: The type of the Kafka principal. -# principal_name: The name of the Kafka principal. -# max_lifetime_ms: The maximum lifetime of the token in milliseconds, or -1 to use the server side default. +#ApiKey: ControllerRegistration, 70 +ControllerRegistrationRequestV0 => controller_id incarnation_id zk_migration_ready {listeners} {features} TAG_BUFFER + controller_id => INT32 + incarnation_id => UUID + zk_migration_ready => BOOLEAN + listeners => name host port security_protocol TAG_BUFFER + name => COMPACT_STRING + host => COMPACT_STRING + port => UINT16 + security_protocol => INT16 + features => name min_supported_version max_supported_version TAG_BUFFER + name => COMPACT_STRING + min_supported_version => INT16 + max_supported_version => INT16 + +# controller_id: The ID of the controller to register. +# incarnation_id: The controller incarnation ID, which is unique to each process run. +# zk_migration_ready: Set if the required configurations for ZK migration are present. +# listeners: The listeners of this controller. +# name: The name of the endpoint. +# host: The hostname. +# port: The port. +# security_protocol: The security protocol. +# _tagged_fields: The tagged fields +# features: The features on this controller. +# name: The feature name. +# min_supported_version: The minimum supported feature level. +# max_supported_version: The maximum supported feature level. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -CreateDelegationTokenRequestV1 => [renewers] max_lifetime_ms - renewers => principal_type principal_name - principal_type => STRING - principal_name => STRING - max_lifetime_ms => INT64 +ControllerRegistrationResponseV0 => throttle_time_ms error_code error_message TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING -# renewers: A list of those who are allowed to renew this token before it expires. -# principal_type: The type of the Kafka principal. -# principal_name: The name of the Kafka principal. -# max_lifetime_ms: The maximum lifetime of the token in milliseconds, or -1 to use the server side default. +# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The response error code. +# error_message: The response error message, or null if there was no error. +# _tagged_fields: The tagged fields -CreateDelegationTokenRequestV2 => {renewers} max_lifetime_ms TAG_BUFFER - renewers => principal_type principal_name TAG_BUFFER - principal_type => COMPACT_STRING - principal_name => COMPACT_STRING - max_lifetime_ms => INT64 +#ApiKey: GetTelemetrySubscriptions, 71 +GetTelemetrySubscriptionsRequestV0 => client_instance_id TAG_BUFFER + client_instance_id => UUID -# renewers: A list of those who are allowed to renew this token before it expires. -# principal_type: The type of the Kafka principal. -# principal_name: The name of the Kafka principal. -# _tagged_fields: The tagged fields -# max_lifetime_ms: The maximum lifetime of the token in milliseconds, or -1 to use the server side default. +# client_instance_id: Unique id for this client instance, must be set to 0 on the first request. # _tagged_fields: The tagged fields -CreateDelegationTokenResponseV0 => error_code principal_type principal_name issue_timestamp_ms expiry_timestamp_ms max_timestamp_ms token_id hmac throttle_time_ms - error_code => INT16 - principal_type => STRING - principal_name => STRING - issue_timestamp_ms => INT64 - expiry_timestamp_ms => INT64 - max_timestamp_ms => INT64 - token_id => STRING - hmac => BYTES +GetTelemetrySubscriptionsResponseV0 => throttle_time_ms error_code client_instance_id subscription_id {accepted_compression_types} push_interval_ms telemetry_max_bytes delta_temporality {requested_metrics} TAG_BUFFER throttle_time_ms => INT32 + error_code => INT16 + client_instance_id => UUID + subscription_id => INT32 + accepted_compression_types => INT8 + push_interval_ms => INT32 + telemetry_max_bytes => INT32 + delta_temporality => BOOLEAN + requested_metrics => COMPACT_STRING -# error_code: The top-level error, or zero if there was no error. -# principal_type: The principal type of the token owner. -# principal_name: The name of the token owner. -# issue_timestamp_ms: When this token was generated. -# expiry_timestamp_ms: When this token expires. -# max_timestamp_ms: The maximum lifetime of this token. -# token_id: The token UUID. -# hmac: HMAC of the delegation token. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# client_instance_id: Assigned client instance id if ClientInstanceId was 0 in the request, else 0. +# subscription_id: Unique identifier for the current subscription set for this client instance. +# accepted_compression_types: Compression types that broker accepts for the PushTelemetryRequest. +# push_interval_ms: Configured push interval, which is the lowest configured interval in the current subscription set. +# telemetry_max_bytes: The maximum bytes of binary data the broker accepts in PushTelemetryRequest. +# delta_temporality: Flag to indicate monotonic/counter metrics are to be emitted as deltas or cumulative values. +# requested_metrics: Requested metrics prefix string match. Empty array: No metrics subscribed, Array[0] empty string: All metrics subscribed. +# _tagged_fields: The tagged fields -CreateDelegationTokenResponseV1 => error_code principal_type principal_name issue_timestamp_ms expiry_timestamp_ms max_timestamp_ms token_id hmac throttle_time_ms - error_code => INT16 - principal_type => STRING - principal_name => STRING - issue_timestamp_ms => INT64 - expiry_timestamp_ms => INT64 - max_timestamp_ms => INT64 - token_id => STRING - hmac => BYTES +#ApiKey: PushTelemetry, 72 +PushTelemetryRequestV0 => client_instance_id subscription_id terminating compression_type metrics TAG_BUFFER + client_instance_id => UUID + subscription_id => INT32 + terminating => BOOLEAN + compression_type => INT8 + metrics => COMPACT_BYTES + +# client_instance_id: Unique id for this client instance. +# subscription_id: Unique identifier for the current subscription. +# terminating: Client is terminating the connection. +# compression_type: Compression codec used to compress the metrics. +# metrics: Metrics encoded in OpenTelemetry MetricsData v1 protobuf format. +# _tagged_fields: The tagged fields + + +PushTelemetryResponseV0 => throttle_time_ms error_code TAG_BUFFER throttle_time_ms => INT32 + error_code => INT16 -# error_code: The top-level error, or zero if there was no error. -# principal_type: The principal type of the token owner. -# principal_name: The name of the token owner. -# issue_timestamp_ms: When this token was generated. -# expiry_timestamp_ms: When this token expires. -# max_timestamp_ms: The maximum lifetime of this token. -# token_id: The token UUID. -# hmac: HMAC of the delegation token. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields -CreateDelegationTokenResponseV2 => error_code principal_type principal_name issue_timestamp_ms expiry_timestamp_ms max_timestamp_ms token_id hmac throttle_time_ms TAG_BUFFER - error_code => INT16 - principal_type => COMPACT_STRING - principal_name => COMPACT_STRING - issue_timestamp_ms => INT64 - expiry_timestamp_ms => INT64 - max_timestamp_ms => INT64 - token_id => COMPACT_STRING - hmac => COMPACT_BYTES +#ApiKey: AssignReplicasToDirs, 73 +AssignReplicasToDirsRequestV0 => broker_id broker_epoch {directories} TAG_BUFFER + broker_id => INT32 + broker_epoch => INT64 + directories => id {topics} TAG_BUFFER + id => UUID + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index TAG_BUFFER + partition_index => INT32 + +# broker_id: The ID of the requesting broker. +# broker_epoch: The epoch of the requesting broker. +# directories: The directories to which replicas should be assigned. +# id: The ID of the directory. +# topics: The topics assigned to the directory. +# topic_id: The ID of the assigned topic. +# partitions: The partitions assigned to the directory. +# partition_index: The partition index. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +AssignReplicasToDirsResponseV0 => throttle_time_ms error_code {directories} TAG_BUFFER throttle_time_ms => INT32 + error_code => INT16 + directories => id {topics} TAG_BUFFER + id => UUID + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code TAG_BUFFER + partition_index => INT32 + error_code => INT16 -# error_code: The top-level error, or zero if there was no error. -# principal_type: The principal type of the token owner. -# principal_name: The name of the token owner. -# issue_timestamp_ms: When this token was generated. -# expiry_timestamp_ms: When this token expires. -# max_timestamp_ms: The maximum lifetime of this token. -# token_id: The token UUID. -# hmac: HMAC of the delegation token. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top level response error code. +# directories: The list of directories and their assigned partitions. +# id: The ID of the directory. +# topics: The list of topics and their assigned partitions. +# topic_id: The ID of the assigned topic. +# partitions: The list of assigned partitions. +# partition_index: The partition index. +# error_code: The partition level error code. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: RenewDelegationToken, 39 -RenewDelegationTokenRequestV0 => hmac renew_period_ms - hmac => BYTES - renew_period_ms => INT64 +#ApiKey: ListConfigResources, 74 +ListConfigResourcesRequestV0 => TAG_BUFFER -# hmac: The HMAC of the delegation token to be renewed. -# renew_period_ms: The renewal time period in milliseconds. +# _tagged_fields: The tagged fields -RenewDelegationTokenRequestV1 => hmac renew_period_ms - hmac => BYTES - renew_period_ms => INT64 +ListConfigResourcesRequestV1 => {resource_types} TAG_BUFFER + resource_types => INT8 -# hmac: The HMAC of the delegation token to be renewed. -# renew_period_ms: The renewal time period in milliseconds. +# resource_types: The list of resource type. If the list is empty, it uses default supported config resource types. +# _tagged_fields: The tagged fields -RenewDelegationTokenResponseV0 => error_code expiry_timestamp_ms throttle_time_ms - error_code => INT16 - expiry_timestamp_ms => INT64 +ListConfigResourcesResponseV0 => throttle_time_ms error_code {config_resources} TAG_BUFFER throttle_time_ms => INT32 + error_code => INT16 + config_resources => resource_name TAG_BUFFER + resource_name => COMPACT_STRING -# error_code: The error code, or 0 if there was no error. -# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# config_resources: Each config resource in the response. +# resource_name: The resource name. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -RenewDelegationTokenResponseV1 => error_code expiry_timestamp_ms throttle_time_ms - error_code => INT16 - expiry_timestamp_ms => INT64 +ListConfigResourcesResponseV1 => throttle_time_ms error_code {config_resources} TAG_BUFFER throttle_time_ms => INT32 + error_code => INT16 + config_resources => resource_name resource_type TAG_BUFFER + resource_name => COMPACT_STRING + resource_type => INT8 -# error_code: The error code, or 0 if there was no error. -# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# config_resources: Each config resource in the response. +# resource_name: The resource name. +# resource_type: The resource type. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +#ApiKey: DescribeTopicPartitions, 75 +DescribeTopicPartitionsRequestV0 => {topics} response_partition_limit cursor TAG_BUFFER + topics => name TAG_BUFFER + name => COMPACT_STRING + response_partition_limit => INT32 + cursor => topic_name partition_index TAG_BUFFER + topic_name => COMPACT_STRING + partition_index => INT32 + +# topics: The topics to fetch details for. +# name: The topic name. +# _tagged_fields: The tagged fields +# response_partition_limit: The maximum number of partitions included in the response. +# cursor: The first topic and partition index to fetch details for. +# topic_name: The name for the first topic to process. +# partition_index: The partition index to start with. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +DescribeTopicPartitionsResponseV0 => throttle_time_ms {topics} next_cursor TAG_BUFFER + throttle_time_ms => INT32 + topics => error_code name topic_id is_internal {partitions} topic_authorized_operations TAG_BUFFER + error_code => INT16 + name => COMPACT_NULLABLE_STRING + topic_id => UUID + is_internal => BOOLEAN + partitions => error_code partition_index leader_id leader_epoch {replica_nodes} {isr_nodes} {eligible_leader_replicas} {last_known_elr} {offline_replicas} TAG_BUFFER + error_code => INT16 + partition_index => INT32 + leader_id => INT32 + leader_epoch => INT32 + replica_nodes => INT32 + isr_nodes => INT32 + eligible_leader_replicas => INT32 + last_known_elr => INT32 + offline_replicas => INT32 + topic_authorized_operations => INT32 + next_cursor => topic_name partition_index TAG_BUFFER + topic_name => COMPACT_STRING + partition_index => INT32 +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# topics: Each topic in the response. +# error_code: The topic error, or 0 if there was no error. +# name: The topic name. +# topic_id: The topic id. +# is_internal: True if the topic is internal. +# partitions: Each partition in the topic. +# error_code: The partition error, or 0 if there was no error. +# partition_index: The partition index. +# leader_id: The ID of the leader broker. +# leader_epoch: The leader epoch of this partition. +# replica_nodes: The set of all nodes that host this partition. +# isr_nodes: The set of nodes that are in sync with the leader for this partition. +# eligible_leader_replicas: The new eligible leader replicas otherwise. +# last_known_elr: The last known ELR. +# offline_replicas: The set of offline replicas of this partition. +# _tagged_fields: The tagged fields +# topic_authorized_operations: 32-bit bitfield to represent authorized operations for this topic. +# _tagged_fields: The tagged fields +# next_cursor: The next topic and partition index to fetch details for. +# topic_name: The name for the first topic to process. +# partition_index: The partition index to start with. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: ExpireDelegationToken, 40 -ExpireDelegationTokenRequestV0 => hmac expiry_time_period_ms - hmac => BYTES - expiry_time_period_ms => INT64 -# hmac: The HMAC of the delegation token to be expired. -# expiry_time_period_ms: The expiry time period in milliseconds. +#ApiKey: ShareGroupHeartbeat, 76 +ShareGroupHeartbeatRequestV1 => group_id member_id member_epoch rack_id {subscribed_topic_names} TAG_BUFFER + group_id => COMPACT_STRING + member_id => COMPACT_STRING + member_epoch => INT32 + rack_id => COMPACT_NULLABLE_STRING + subscribed_topic_names => COMPACT_STRING +# group_id: The group identifier. +# member_id: The member id generated by the consumer. The member id must be kept during the entire lifetime of the consumer process. +# member_epoch: The current member epoch; 0 to join the group; -1 to leave the group. +# rack_id: null if not provided or if it didn't change since the last heartbeat; the rack ID of consumer otherwise. +# subscribed_topic_names: null if it didn't change since the last heartbeat; the subscribed topic names otherwise. +# _tagged_fields: The tagged fields -ExpireDelegationTokenRequestV1 => hmac expiry_time_period_ms - hmac => BYTES - expiry_time_period_ms => INT64 -# hmac: The HMAC of the delegation token to be expired. -# expiry_time_period_ms: The expiry time period in milliseconds. -ExpireDelegationTokenResponseV0 => error_code expiry_timestamp_ms throttle_time_ms - error_code => INT16 - expiry_timestamp_ms => INT64 +ShareGroupHeartbeatResponseV1 => throttle_time_ms error_code error_message member_id member_epoch heartbeat_interval_ms assignment TAG_BUFFER throttle_time_ms => INT32 - -# error_code: The error code, or 0 if there was no error. -# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. - - -ExpireDelegationTokenResponseV1 => error_code expiry_timestamp_ms throttle_time_ms error_code => INT16 - expiry_timestamp_ms => INT64 - throttle_time_ms => INT32 + error_message => COMPACT_NULLABLE_STRING + member_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + heartbeat_interval_ms => INT32 + assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 -# error_code: The error code, or 0 if there was no error. -# expiry_timestamp_ms: The timestamp in milliseconds at which this token expires. # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level error code, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# member_id: The member ID is generated by the consumer and provided by the consumer for all requests. +# member_epoch: The member epoch. +# heartbeat_interval_ms: The heartbeat interval in milliseconds. +# assignment: null if not provided; the assignment otherwise. +# topic_partitions: The partitions assigned to the member. +# topic_id: The topic ID. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: DescribeDelegationToken, 41 -DescribeDelegationTokenRequestV0 => [owners] - owners => principal_type principal_name - principal_type => STRING - principal_name => STRING - -# owners: Each owner that we want to describe delegation tokens for, or null to describe all tokens. -# principal_type: The owner principal type. -# principal_name: The owner principal name. +#ApiKey: ShareGroupDescribe, 77 +ShareGroupDescribeRequestV1 => {group_ids} include_authorized_operations TAG_BUFFER + group_ids => COMPACT_STRING + include_authorized_operations => BOOLEAN +# group_ids: The ids of the groups to describe. +# include_authorized_operations: Whether to include authorized operations. +# _tagged_fields: The tagged fields -DescribeDelegationTokenRequestV1 => [owners] - owners => principal_type principal_name - principal_type => STRING - principal_name => STRING -# owners: Each owner that we want to describe delegation tokens for, or null to describe all tokens. -# principal_type: The owner principal type. -# principal_name: The owner principal name. -DescribeDelegationTokenResponseV0 => error_code [tokens] throttle_time_ms - error_code => INT16 - tokens => principal_type principal_name issue_timestamp expiry_timestamp max_timestamp token_id hmac [renewers] - principal_type => STRING - principal_name => STRING - issue_timestamp => INT64 - expiry_timestamp => INT64 - max_timestamp => INT64 - token_id => STRING - hmac => BYTES - renewers => principal_type principal_name - principal_type => STRING - principal_name => STRING +ShareGroupDescribeResponseV1 => throttle_time_ms {groups} TAG_BUFFER throttle_time_ms => INT32 + groups => error_code error_message group_id group_state group_epoch assignment_epoch assignor_name {members} authorized_operations TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + group_id => COMPACT_STRING + group_state => COMPACT_STRING + group_epoch => INT32 + assignment_epoch => INT32 + assignor_name => COMPACT_STRING + members => member_id rack_id member_epoch client_id client_host {subscribed_topic_names} assignment TAG_BUFFER + member_id => COMPACT_STRING + rack_id => COMPACT_NULLABLE_STRING + member_epoch => INT32 + client_id => COMPACT_STRING + client_host => COMPACT_STRING + subscribed_topic_names => COMPACT_STRING + assignment => {topic_partitions} TAG_BUFFER + topic_partitions => topic_id topic_name {partitions} TAG_BUFFER + topic_id => UUID + topic_name => COMPACT_STRING + partitions => INT32 + authorized_operations => INT32 -# error_code: The error code, or 0 if there was no error. -# tokens: The tokens. -# principal_type: The token principal type. -# principal_name: The token principal name. -# issue_timestamp: The token issue timestamp in milliseconds. -# expiry_timestamp: The token expiry timestamp in milliseconds. -# max_timestamp: The token maximum timestamp length in milliseconds. -# token_id: The token ID. -# hmac: The token HMAC. -# renewers: Those who are able to renew this token before it expires. -# principal_type: The renewer principal type -# principal_name: The renewer principal name # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# group_epoch: The group epoch. +# assignment_epoch: The assignment epoch. +# assignor_name: The selected assignor. +# members: The members. +# member_id: The member ID. +# rack_id: The member rack ID. +# member_epoch: The current member epoch. +# client_id: The client ID. +# client_host: The client host. +# subscribed_topic_names: The subscribed topic names. +# assignment: The current assignment. +# topic_partitions: The assigned topic-partitions to the member. +# topic_id: The topic ID. +# topic_name: The topic name. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DescribeDelegationTokenResponseV1 => error_code [tokens] throttle_time_ms - error_code => INT16 - tokens => principal_type principal_name issue_timestamp expiry_timestamp max_timestamp token_id hmac [renewers] - principal_type => STRING - principal_name => STRING - issue_timestamp => INT64 - expiry_timestamp => INT64 - max_timestamp => INT64 - token_id => STRING - hmac => BYTES - renewers => principal_type principal_name - principal_type => STRING - principal_name => STRING - throttle_time_ms => INT32 - -# error_code: The error code, or 0 if there was no error. -# tokens: The tokens. -# principal_type: The token principal type. -# principal_name: The token principal name. -# issue_timestamp: The token issue timestamp in milliseconds. -# expiry_timestamp: The token expiry timestamp in milliseconds. -# max_timestamp: The token maximum timestamp length in milliseconds. -# token_id: The token ID. -# hmac: The token HMAC. -# renewers: Those who are able to renew this token before it expires. -# principal_type: The renewer principal type -# principal_name: The renewer principal name -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +#ApiKey: ShareFetch, 78 +ShareFetchRequestV1 => group_id member_id share_session_epoch max_wait_ms min_bytes max_bytes max_records batch_size {topics} {forgotten_topics_data} TAG_BUFFER + group_id => COMPACT_NULLABLE_STRING + member_id => COMPACT_NULLABLE_STRING + share_session_epoch => INT32 + max_wait_ms => INT32 + min_bytes => INT32 + max_bytes => INT32 + max_records => INT32 + batch_size => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index {acknowledgement_batches} TAG_BUFFER + partition_index => INT32 + acknowledgement_batches => first_offset last_offset {acknowledge_types} TAG_BUFFER + first_offset => INT64 + last_offset => INT64 + acknowledge_types => INT8 + forgotten_topics_data => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => INT32 +# group_id: The group identifier. +# member_id: The member ID. +# share_session_epoch: The current share session epoch: 0 to open a share session; -1 to close it; otherwise increments for consecutive requests. +# max_wait_ms: The maximum time in milliseconds to wait for the response. +# min_bytes: The minimum bytes to accumulate in the response. +# max_bytes: The maximum bytes to fetch. See KIP-74 for cases where this limit may not be honored. +# max_records: The maximum number of records to fetch. This limit can be exceeded for alignment of batch boundaries. +# batch_size: The optimal number of records for batches of acquired records and acknowledgements. +# topics: The topics to fetch. +# topic_id: The unique topic ID. +# partitions: The partitions to fetch. +# partition_index: The partition index. +# acknowledgement_batches: Record batches to acknowledge. +# first_offset: First offset of batch of records to acknowledge. +# last_offset: Last offset (inclusive) of batch of records to acknowledge. +# acknowledge_types: Array of acknowledge types - 0:Gap,1:Accept,2:Release,3:Reject. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# forgotten_topics_data: The partitions to remove from this share session. +# topic_id: The unique topic ID. +# partitions: The partitions indexes to forget. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -#ApiKey: DeleteGroups, 42 -DeleteGroupsRequestV0 => [groups_names] - groups_names => STRING -# groups_names: The group names to delete. -DeleteGroupsRequestV1 => [groups_names] - groups_names => STRING +ShareFetchResponseV1 => throttle_time_ms error_code error_message acquisition_lock_timeout_ms {responses} {node_endpoints} TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + acquisition_lock_timeout_ms => INT32 + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code error_message acknowledge_error_code acknowledge_error_message current_leader records {acquired_records} TAG_BUFFER + partition_index => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + acknowledge_error_code => INT16 + acknowledge_error_message => COMPACT_NULLABLE_STRING + current_leader => leader_id leader_epoch TAG_BUFFER + leader_id => INT32 + leader_epoch => INT32 + records => COMPACT_RECORDS + acquired_records => first_offset last_offset delivery_count TAG_BUFFER + first_offset => INT64 + last_offset => INT64 + delivery_count => INT16 + node_endpoints => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING -# groups_names: The group names to delete. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The top-level response error code. +# error_message: The top-level error message, or null if there was no error. +# acquisition_lock_timeout_ms: The time in milliseconds for which the acquired records are locked. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The fetch error code, or 0 if there was no fetch error. +# error_message: The fetch error message, or null if there was no fetch error. +# acknowledge_error_code: The acknowledge error code, or 0 if there was no acknowledge error. +# acknowledge_error_message: The acknowledge error message, or null if there was no acknowledge error. +# current_leader: The current leader of the partition. +# leader_id: The ID of the current leader or -1 if the leader is unknown. +# leader_epoch: The latest known leader epoch. +# _tagged_fields: The tagged fields +# records: The record data. +# acquired_records: The acquired records. +# first_offset: The earliest offset in this batch of acquired records. +# last_offset: The last offset of this batch of acquired records. +# delivery_count: The delivery count of this batch of acquired records. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# node_endpoints: Endpoints for all current leaders enumerated in PartitionData with error NOT_LEADER_OR_FOLLOWER. +# node_id: The ID of the associated node. +# host: The node's hostname. +# port: The node's port. +# rack: The rack of the node, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DeleteGroupsRequestV2 => {groups_names} TAG_BUFFER - groups_names => COMPACT_STRING +#ApiKey: ShareAcknowledge, 79 +ShareAcknowledgeRequestV1 => group_id member_id share_session_epoch {topics} TAG_BUFFER + group_id => COMPACT_NULLABLE_STRING + member_id => COMPACT_NULLABLE_STRING + share_session_epoch => INT32 + topics => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index {acknowledgement_batches} TAG_BUFFER + partition_index => INT32 + acknowledgement_batches => first_offset last_offset {acknowledge_types} TAG_BUFFER + first_offset => INT64 + last_offset => INT64 + acknowledge_types => INT8 -# groups_names: The group names to delete. +# group_id: The group identifier. +# member_id: The member ID. +# share_session_epoch: The current share session epoch: 0 to open a share session; -1 to close it; otherwise increments for consecutive requests. +# topics: The topics containing records to acknowledge. +# topic_id: The unique topic ID. +# partitions: The partitions containing records to acknowledge. +# partition_index: The partition index. +# acknowledgement_batches: Record batches to acknowledge. +# first_offset: First offset of batch of records to acknowledge. +# last_offset: Last offset (inclusive) of batch of records to acknowledge. +# acknowledge_types: Array of acknowledge types - 0:Gap,1:Accept,2:Release,3:Reject. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -DeleteGroupsResponseV0 => throttle_time_ms [results] - throttle_time_ms => INT32 - results => group_id error_code - group_id => STRING - error_code => INT16 - -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# results: The deletion results -# group_id: The group id -# error_code: The deletion error, or 0 if the deletion succeeded. -DeleteGroupsResponseV1 => throttle_time_ms [results] +ShareAcknowledgeResponseV1 => throttle_time_ms error_code error_message {responses} {node_endpoints} TAG_BUFFER throttle_time_ms => INT32 - results => group_id error_code - group_id => STRING - error_code => INT16 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + responses => topic_id {partitions} TAG_BUFFER + topic_id => UUID + partitions => partition_index error_code error_message current_leader TAG_BUFFER + partition_index => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + current_leader => leader_id leader_epoch TAG_BUFFER + leader_id => INT32 + leader_epoch => INT32 + node_endpoints => node_id host port rack TAG_BUFFER + node_id => INT32 + host => COMPACT_STRING + port => INT32 + rack => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# results: The deletion results -# group_id: The group id -# error_code: The deletion error, or 0 if the deletion succeeded. +# error_code: The top level response error code. +# error_message: The top-level error message, or null if there was no error. +# responses: The response topics. +# topic_id: The unique topic ID. +# partitions: The topic partitions. +# partition_index: The partition index. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# current_leader: The current leader of the partition. +# leader_id: The ID of the current leader or -1 if the leader is unknown. +# leader_epoch: The latest known leader epoch. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# node_endpoints: Endpoints for all current leaders enumerated in PartitionData with error NOT_LEADER_OR_FOLLOWER. +# node_id: The ID of the associated node. +# host: The node's hostname. +# port: The node's port. +# rack: The rack of the node, or null if it has not been assigned to a rack. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -DeleteGroupsResponseV2 => throttle_time_ms {results} TAG_BUFFER +#ApiKey: AddRaftVoter, 80 +AddRaftVoterRequestV0 => cluster_id timeout_ms voter_id voter_directory_id {listeners} TAG_BUFFER + cluster_id => COMPACT_NULLABLE_STRING + timeout_ms => INT32 + voter_id => INT32 + voter_directory_id => UUID + listeners => name host port TAG_BUFFER + name => COMPACT_STRING + host => COMPACT_STRING + port => UINT16 + +# cluster_id: The cluster id. +# timeout_ms: The maximum time to wait for the request to complete before returning. +# voter_id: The replica id of the voter getting added to the topic partition. +# voter_directory_id: The directory id of the voter getting added to the topic partition. +# listeners: The endpoints that can be used to communicate with the voter. +# name: The name of the endpoint. +# host: The hostname. +# port: The port. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields + + +AddRaftVoterResponseV0 => throttle_time_ms error_code error_message TAG_BUFFER throttle_time_ms => INT32 - results => group_id error_code TAG_BUFFER - group_id => COMPACT_STRING - error_code => INT16 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# results: The deletion results -# group_id: The group id -# error_code: The deletion error, or 0 if the deletion succeeded. -# _tagged_fields: The tagged fields +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. # _tagged_fields: The tagged fields -#ApiKey: ElectLeaders, 43 -ElectLeadersRequestV0 => [topic_partitions] timeout_ms - topic_partitions => topic [partition_id] - topic => STRING - partition_id => INT32 - timeout_ms => INT32 - -# topic_partitions: The topic partitions to elect leaders. -# topic: The name of a topic. -# partition_id: The partitions of this topic whose leader should be elected. -# timeout_ms: The time in ms to wait for the election to complete. +#ApiKey: RemoveRaftVoter, 81 +RemoveRaftVoterRequestV0 => cluster_id voter_id voter_directory_id TAG_BUFFER + cluster_id => COMPACT_NULLABLE_STRING + voter_id => INT32 + voter_directory_id => UUID +# cluster_id: The cluster id of the request. +# voter_id: The replica id of the voter getting removed from the topic partition. +# voter_directory_id: The directory id of the voter getting removed from the topic partition. +# _tagged_fields: The tagged fields -ElectLeadersRequestV1 => election_type [topic_partitions] timeout_ms - election_type => INT8 - topic_partitions => topic [partition_id] - topic => STRING - partition_id => INT32 - timeout_ms => INT32 -# election_type: Type of elections to conduct for the partition. A value of '0' elects the preferred replica. A value of '1' elects the first live replica if there are no in-sync replica. -# topic_partitions: The topic partitions to elect leaders. -# topic: The name of a topic. -# partition_id: The partitions of this topic whose leader should be elected. -# timeout_ms: The time in ms to wait for the election to complete. +RemoveRaftVoterResponseV0 => throttle_time_ms error_code error_message TAG_BUFFER + throttle_time_ms => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. +# _tagged_fields: The tagged fields -ElectLeadersRequestV2 => election_type {topic_partitions} timeout_ms TAG_BUFFER - election_type => INT8 - topic_partitions => topic {partition_id} TAG_BUFFER - topic => COMPACT_STRING - partition_id => INT32 - timeout_ms => INT32 -# election_type: Type of elections to conduct for the partition. A value of '0' elects the preferred replica. A value of '1' elects the first live replica if there are no in-sync replica. -# topic_partitions: The topic partitions to elect leaders. -# topic: The name of a topic. -# partition_id: The partitions of this topic whose leader should be elected. +#ApiKey: UpdateRaftVoter, 82 +UpdateRaftVoterRequestV0 => cluster_id current_leader_epoch voter_id voter_directory_id {listeners} kraft_version_feature TAG_BUFFER + cluster_id => COMPACT_NULLABLE_STRING + current_leader_epoch => INT32 + voter_id => INT32 + voter_directory_id => UUID + listeners => name host port TAG_BUFFER + name => COMPACT_STRING + host => COMPACT_STRING + port => UINT16 + kraft_version_feature => min_supported_version max_supported_version TAG_BUFFER + min_supported_version => INT16 + max_supported_version => INT16 + +# cluster_id: The cluster id. +# current_leader_epoch: The current leader epoch of the partition, -1 for unknown leader epoch. +# voter_id: The replica id of the voter getting updated in the topic partition. +# voter_directory_id: The directory id of the voter getting updated in the topic partition. +# listeners: The endpoint that can be used to communicate with the leader. +# name: The name of the endpoint. +# host: The hostname. +# port: The port. +# _tagged_fields: The tagged fields +# kraft_version_feature: The range of versions of the protocol that the replica supports. +# min_supported_version: The minimum supported KRaft protocol version. +# max_supported_version: The maximum supported KRaft protocol version. # _tagged_fields: The tagged fields -# timeout_ms: The time in ms to wait for the election to complete. # _tagged_fields: The tagged fields -ElectLeadersResponseV0 => throttle_time_ms [replica_election_results] +UpdateRaftVoterResponseV0 => throttle_time_ms error_code TAG_BUFFER throttle_time_ms => INT32 - replica_election_results => topic [partition_result] - topic => STRING - partition_result => partition_id error_code error_message - partition_id => INT32 - error_code => INT16 - error_message => NULLABLE_STRING + error_code => INT16 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# replica_election_results: The election results, or an empty array if the requester did not have permission and the request asks for all partitions. -# topic: The topic name -# partition_result: The results for each partition -# partition_id: The partition id -# error_code: The result error, or zero if there was no error. -# error_message: The result message, or null if there was no error. +# error_code: The error code, or 0 if there was no error. +# _tagged_fields: The tagged fields -ElectLeadersResponseV1 => throttle_time_ms error_code [replica_election_results] - throttle_time_ms => INT32 - error_code => INT16 - replica_election_results => topic [partition_result] - topic => STRING - partition_result => partition_id error_code error_message - partition_id => INT32 - error_code => INT16 - error_message => NULLABLE_STRING +#ApiKey: StreamsGroupHeartbeat, 88 +StreamsGroupHeartbeatRequestV0 => group_id member_id member_epoch endpoint_information_epoch instance_id rack_id rebalance_timeout_ms topology {active_tasks} {standby_tasks} {warmup_tasks} process_id user_endpoint {client_tags} {task_offsets} {task_end_offsets} shutdown_application TAG_BUFFER + group_id => COMPACT_STRING + member_id => COMPACT_STRING + member_epoch => INT32 + endpoint_information_epoch => INT32 + instance_id => COMPACT_NULLABLE_STRING + rack_id => COMPACT_NULLABLE_STRING + rebalance_timeout_ms => INT32 + topology => epoch {subtopologies} TAG_BUFFER + epoch => INT32 + subtopologies => subtopology_id {source_topics} {source_topic_regex} {state_changelog_topics} {repartition_sink_topics} {repartition_source_topics} {copartition_groups} TAG_BUFFER + subtopology_id => COMPACT_STRING + source_topics => COMPACT_STRING + source_topic_regex => COMPACT_STRING + state_changelog_topics => name partitions replication_factor {topic_configs} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 + replication_factor => INT16 + topic_configs => key value TAG_BUFFER + key => COMPACT_STRING + value => COMPACT_STRING + repartition_sink_topics => COMPACT_STRING + repartition_source_topics => name partitions replication_factor {topic_configs} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 + replication_factor => INT16 + topic_configs => key value TAG_BUFFER + key => COMPACT_STRING + value => COMPACT_STRING + copartition_groups => {source_topics} {source_topic_regex} {repartition_source_topics} TAG_BUFFER + source_topics => INT16 + source_topic_regex => INT16 + repartition_source_topics => INT16 + active_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + standby_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + warmup_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + process_id => COMPACT_NULLABLE_STRING + user_endpoint => host port TAG_BUFFER + host => COMPACT_STRING + port => UINT16 + client_tags => key value TAG_BUFFER + key => COMPACT_STRING + value => COMPACT_STRING + task_offsets => subtopology_id partition offset TAG_BUFFER + subtopology_id => COMPACT_STRING + partition => INT32 + offset => INT64 + task_end_offsets => subtopology_id partition offset TAG_BUFFER + subtopology_id => COMPACT_STRING + partition => INT32 + offset => INT64 + shutdown_application => BOOLEAN -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The top level response error code. -# replica_election_results: The election results, or an empty array if the requester did not have permission and the request asks for all partitions. -# topic: The topic name -# partition_result: The results for each partition -# partition_id: The partition id -# error_code: The result error, or zero if there was no error. -# error_message: The result message, or null if there was no error. +# group_id: The group identifier. +# member_id: The member ID generated by the streams consumer. The member ID must be kept during the entire lifetime of the streams consumer process. +# member_epoch: The current member epoch; 0 to join the group; -1 to leave the group; -2 to indicate that the static member will rejoin. +# endpoint_information_epoch: The current endpoint epoch of this client, represents the latest endpoint epoch this client received +# instance_id: null if not provided or if it didn't change since the last heartbeat; the instance ID for static membership otherwise. +# rack_id: null if not provided or if it didn't change since the last heartbeat; the rack ID of the member otherwise. +# rebalance_timeout_ms: -1 if it didn't change since the last heartbeat; the maximum time in milliseconds that the coordinator will wait on the member to revoke its tasks otherwise. +# topology: The topology metadata of the streams application. Used to initialize the topology of the group and to check if the topology corresponds to the topology initialized for the group. Only sent when memberEpoch = 0, must be non-empty. Null otherwise. +# epoch: The epoch of the topology. Used to check if the topology corresponds to the topology initialized on the brokers. +# subtopologies: The sub-topologies of the streams application. +# subtopology_id: String to uniquely identify the subtopology. Deterministically generated from the topology +# source_topics: The topics the topology reads from. +# source_topic_regex: The regular expressions identifying topics the subtopology reads from. +# state_changelog_topics: The set of state changelog topics associated with this subtopology. Created automatically. +# name: The name of the topic. +# partitions: The number of partitions in the topic. Can be 0 if no specific number of partitions is enforced. Always 0 for changelog topics. +# replication_factor: The replication factor of the topic. Can be 0 if the default replication factor should be used. +# topic_configs: Topic-level configurations as key-value pairs. +# key: key of the config +# value: value of the config +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# repartition_sink_topics: The repartition topics the subtopology writes to. +# repartition_source_topics: The set of source topics that are internally created repartition topics. Created automatically. +# copartition_groups: A subset of source topics that must be copartitioned. +# source_topics: The topics the topology reads from. Index into the array on the subtopology level. +# source_topic_regex: Regular expressions identifying topics the subtopology reads from. Index into the array on the subtopology level. +# repartition_source_topics: The set of source topics that are internally created repartition topics. Index into the array on the subtopology level. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# active_tasks: Currently owned active tasks for this client. Null if unchanged since last heartbeat. +# subtopology_id: The subtopology identifier. +# partitions: The partitions of the input topics processed by this member. +# _tagged_fields: The tagged fields +# standby_tasks: Currently owned standby tasks for this client. Null if unchanged since last heartbeat. +# warmup_tasks: Currently owned warm-up tasks for this client. Null if unchanged since last heartbeat. +# process_id: Identity of the streams instance that may have multiple consumers. Null if unchanged since last heartbeat. +# user_endpoint: User-defined endpoint for Interactive Queries. Null if unchanged since last heartbeat, or if not defined on the client. +# host: host of the endpoint +# port: port of the endpoint +# _tagged_fields: The tagged fields +# client_tags: Used for rack-aware assignment algorithm. Null if unchanged since last heartbeat. +# task_offsets: Cumulative changelog offsets for tasks. Only updated when a warm-up task has caught up, and according to the task offset interval. Null if unchanged since last heartbeat. +# subtopology_id: The subtopology identifier. +# partition: The partition. +# offset: The offset. +# _tagged_fields: The tagged fields +# task_end_offsets: Cumulative changelog end-offsets for tasks. Only updated when a warm-up task has caught up, and according to the task offset interval. Null if unchanged since last heartbeat. +# shutdown_application: Whether all Streams clients in the group should shut down. +# _tagged_fields: The tagged fields -ElectLeadersResponseV2 => throttle_time_ms error_code {replica_election_results} TAG_BUFFER +StreamsGroupHeartbeatResponseV0 => throttle_time_ms error_code error_message member_id member_epoch heartbeat_interval_ms acceptable_recovery_lag task_offset_interval_ms {status} {active_tasks} {standby_tasks} {warmup_tasks} endpoint_information_epoch {partitions_by_user_endpoint} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 - replica_election_results => topic {partition_result} TAG_BUFFER - topic => COMPACT_STRING - partition_result => partition_id error_code error_message TAG_BUFFER - partition_id => INT32 - error_code => INT16 - error_message => COMPACT_NULLABLE_STRING + error_message => COMPACT_NULLABLE_STRING + member_id => COMPACT_STRING + member_epoch => INT32 + heartbeat_interval_ms => INT32 + acceptable_recovery_lag => INT32 + task_offset_interval_ms => INT32 + status => status_code status_detail TAG_BUFFER + status_code => INT8 + status_detail => COMPACT_STRING + active_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + standby_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + warmup_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + endpoint_information_epoch => INT32 + partitions_by_user_endpoint => user_endpoint {active_partitions} {standby_partitions} TAG_BUFFER + user_endpoint => host port TAG_BUFFER + host => COMPACT_STRING + port => UINT16 + active_partitions => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => INT32 + standby_partitions => topic {partitions} TAG_BUFFER + topic => COMPACT_STRING + partitions => INT32 # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The top level response error code. -# replica_election_results: The election results, or an empty array if the requester did not have permission and the request asks for all partitions. -# topic: The topic name -# partition_result: The results for each partition -# partition_id: The partition id -# error_code: The result error, or zero if there was no error. -# error_message: The result message, or null if there was no error. +# error_code: The top-level error code, or 0 if there was no error +# error_message: The top-level error message, or null if there was no error. +# member_id: The member id is always generated by the streams consumer. +# member_epoch: The member epoch. +# heartbeat_interval_ms: The heartbeat interval in milliseconds. +# acceptable_recovery_lag: The maximal lag a warm-up task can have to be considered caught-up. +# task_offset_interval_ms: The interval in which the task changelog offsets on a client are updated on the broker. The offsets are sent with the next heartbeat after this time has passed. +# status: Indicate zero or more status for the group. Null if unchanged since last heartbeat. +# status_code: A code to indicate that a particular status is active for the group membership +# status_detail: A string representation of the status. +# _tagged_fields: The tagged fields +# active_tasks: Assigned active tasks for this client. Null if unchanged since last heartbeat. +# subtopology_id: The subtopology identifier. +# partitions: The partitions of the input topics processed by this member. +# _tagged_fields: The tagged fields +# standby_tasks: Assigned standby tasks for this client. Null if unchanged since last heartbeat. +# warmup_tasks: Assigned warm-up tasks for this client. Null if unchanged since last heartbeat. +# endpoint_information_epoch: The endpoint epoch set in the response +# partitions_by_user_endpoint: Global assignment information used for IQ. Null if unchanged since last heartbeat. +# user_endpoint: User-defined endpoint to connect to the node +# host: host of the endpoint +# port: port of the endpoint # _tagged_fields: The tagged fields +# active_partitions: All topic partitions materialized by active tasks on the node +# topic: topic name +# partitions: partitions +# _tagged_fields: The tagged fields +# standby_partitions: All topic partitions materialized by standby tasks on the node # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: IncrementalAlterConfigs, 44 -IncrementalAlterConfigsRequestV0 => [resources] validate_only - resources => resource_type resource_name [configs] - resource_type => INT8 - resource_name => STRING - configs => name config_operation value - name => STRING - config_operation => INT8 - value => NULLABLE_STRING - validate_only => BOOLEAN +#ApiKey: StreamsGroupDescribe, 89 +StreamsGroupDescribeRequestV0 => {group_ids} include_authorized_operations TAG_BUFFER + group_ids => COMPACT_STRING + include_authorized_operations => BOOLEAN -# resources: The incremental updates for each resource. -# resource_type: The resource type. -# resource_name: The resource name. -# configs: The configurations. -# name: The configuration key name. -# config_operation: The type (Set, Delete, Append, Subtract) of operation. -# value: The value to set for the configuration key. -# validate_only: True if we should validate the request, but not change the configurations. +# group_ids: The ids of the groups to describe +# include_authorized_operations: Whether to include authorized operations. +# _tagged_fields: The tagged fields -IncrementalAlterConfigsRequestV1 => {resources} validate_only TAG_BUFFER - resources => resource_type resource_name {configs} TAG_BUFFER - resource_type => INT8 - resource_name => COMPACT_STRING - configs => name config_operation value TAG_BUFFER - name => COMPACT_STRING - config_operation => INT8 - value => COMPACT_NULLABLE_STRING - validate_only => BOOLEAN +StreamsGroupDescribeResponseV0 => throttle_time_ms {groups} TAG_BUFFER + throttle_time_ms => INT32 + groups => error_code error_message group_id group_state group_epoch assignment_epoch topology {members} authorized_operations TAG_BUFFER + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING + group_id => COMPACT_STRING + group_state => COMPACT_STRING + group_epoch => INT32 + assignment_epoch => INT32 + topology => epoch {subtopologies} TAG_BUFFER + epoch => INT32 + subtopologies => subtopology_id {source_topics} {repartition_sink_topics} {state_changelog_topics} {repartition_source_topics} TAG_BUFFER + subtopology_id => COMPACT_STRING + source_topics => COMPACT_STRING + repartition_sink_topics => COMPACT_STRING + state_changelog_topics => name partitions replication_factor {topic_configs} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 + replication_factor => INT16 + topic_configs => key value TAG_BUFFER + key => COMPACT_STRING + value => COMPACT_STRING + repartition_source_topics => name partitions replication_factor {topic_configs} TAG_BUFFER + name => COMPACT_STRING + partitions => INT32 + replication_factor => INT16 + topic_configs => key value TAG_BUFFER + key => COMPACT_STRING + value => COMPACT_STRING + members => member_id member_epoch instance_id rack_id client_id client_host topology_epoch process_id user_endpoint {client_tags} {task_offsets} {task_end_offsets} assignment target_assignment is_classic TAG_BUFFER + member_id => COMPACT_STRING + member_epoch => INT32 + instance_id => COMPACT_NULLABLE_STRING + rack_id => COMPACT_NULLABLE_STRING + client_id => COMPACT_STRING + client_host => COMPACT_STRING + topology_epoch => INT32 + process_id => COMPACT_STRING + user_endpoint => host port TAG_BUFFER + host => COMPACT_STRING + port => UINT16 + client_tags => key value TAG_BUFFER + key => COMPACT_STRING + value => COMPACT_STRING + task_offsets => subtopology_id partition offset TAG_BUFFER + subtopology_id => COMPACT_STRING + partition => INT32 + offset => INT64 + task_end_offsets => subtopology_id partition offset TAG_BUFFER + subtopology_id => COMPACT_STRING + partition => INT32 + offset => INT64 + assignment => {active_tasks} {standby_tasks} {warmup_tasks} TAG_BUFFER + active_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + standby_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + warmup_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + target_assignment => {active_tasks} {standby_tasks} {warmup_tasks} TAG_BUFFER + active_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + standby_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + warmup_tasks => subtopology_id {partitions} TAG_BUFFER + subtopology_id => COMPACT_STRING + partitions => INT32 + is_classic => BOOLEAN + authorized_operations => INT32 -# resources: The incremental updates for each resource. -# resource_type: The resource type. -# resource_name: The resource name. -# configs: The configurations. -# name: The configuration key name. -# config_operation: The type (Set, Delete, Append, Subtract) of operation. -# value: The value to set for the configuration key. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: Each described group. +# error_code: The describe error, or 0 if there was no error. +# error_message: The top-level error message, or null if there was no error. +# group_id: The group ID string. +# group_state: The group state string, or the empty string. +# group_epoch: The group epoch. +# assignment_epoch: The assignment epoch. +# topology: The topology metadata currently initialized for the streams application. Can be null in case of a describe error. +# epoch: The epoch of the currently initialized topology for this group. +# subtopologies: The subtopologies of the streams application. This contains the configured subtopologies, where the number of partitions are set and any regular expressions are resolved to actual topics. Null if the group is uninitialized, source topics are missing or incorrectly partitioned. +# subtopology_id: String to uniquely identify the subtopology. +# source_topics: The topics the subtopology reads from. +# repartition_sink_topics: The repartition topics the subtopology writes to. +# state_changelog_topics: The set of state changelog topics associated with this subtopology. Created automatically. +# name: The name of the topic. +# partitions: The number of partitions in the topic. Can be 0 if no specific number of partitions is enforced. Always 0 for changelog topics. +# replication_factor: The replication factor of the topic. Can be 0 if the default replication factor should be used. +# topic_configs: Topic-level configurations as key-value pairs. +# key: key of the config +# value: value of the config # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -# validate_only: True if we should validate the request, but not change the configurations. +# repartition_source_topics: The set of source topics that are internally created repartition topics. Created automatically. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# members: The members. +# member_id: The member ID. +# member_epoch: The member epoch. +# instance_id: The member instance ID for static membership. +# rack_id: The rack ID. +# client_id: The client ID. +# client_host: The client host. +# topology_epoch: The epoch of the topology on the client. +# process_id: Identity of the streams instance that may have multiple clients. +# user_endpoint: User-defined endpoint for Interactive Queries. Null if not defined for this client. +# host: host of the endpoint +# port: port of the endpoint +# _tagged_fields: The tagged fields +# client_tags: Used for rack-aware assignment algorithm. +# task_offsets: Cumulative changelog offsets for tasks. +# subtopology_id: The subtopology identifier. +# partition: The partition. +# offset: The offset. +# _tagged_fields: The tagged fields +# task_end_offsets: Cumulative changelog end offsets for tasks. +# assignment: The current assignment. +# active_tasks: Active tasks for this client. +# subtopology_id: The subtopology identifier. +# partitions: The partitions of the input topics processed by this member. +# _tagged_fields: The tagged fields +# standby_tasks: Standby tasks for this client. +# warmup_tasks: Warm-up tasks for this client. +# _tagged_fields: The tagged fields +# target_assignment: The target assignment. +# is_classic: True for classic members that have not been upgraded yet. +# _tagged_fields: The tagged fields +# authorized_operations: 32-bit bitfield to represent authorized operations for this group. +# _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -IncrementalAlterConfigsResponseV0 => throttle_time_ms [responses] - throttle_time_ms => INT32 - responses => error_code error_message resource_type resource_name - error_code => INT16 - error_message => NULLABLE_STRING - resource_type => INT8 - resource_name => STRING +#ApiKey: DescribeShareGroupOffsets, 90 +DescribeShareGroupOffsetsRequestV0 => {groups} TAG_BUFFER + groups => group_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + topics => topic_name {partitions} TAG_BUFFER + topic_name => COMPACT_STRING + partitions => INT32 -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# responses: The responses for each resource. -# error_code: The resource error code. -# error_message: The resource error message, or null if there was no error. -# resource_type: The resource type. -# resource_name: The resource name. +# groups: The groups to describe offsets for. +# group_id: The group identifier. +# topics: The topics to describe offsets for, or null for all topic-partitions. +# topic_name: The topic name. +# partitions: The partitions. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields -IncrementalAlterConfigsResponseV1 => throttle_time_ms {responses} TAG_BUFFER +DescribeShareGroupOffsetsResponseV0 => throttle_time_ms {groups} TAG_BUFFER throttle_time_ms => INT32 - responses => error_code error_message resource_type resource_name TAG_BUFFER + groups => group_id {topics} error_code error_message TAG_BUFFER + group_id => COMPACT_STRING + topics => topic_name topic_id {partitions} TAG_BUFFER + topic_name => COMPACT_STRING + topic_id => UUID + partitions => partition_index start_offset leader_epoch error_code error_message TAG_BUFFER + partition_index => INT32 + start_offset => INT64 + leader_epoch => INT32 + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING error_code => INT16 error_message => COMPACT_NULLABLE_STRING - resource_type => INT8 - resource_name => COMPACT_STRING -# throttle_time_ms: Duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# responses: The responses for each resource. -# error_code: The resource error code. -# error_message: The resource error message, or null if there was no error. -# resource_type: The resource type. -# resource_name: The resource name. +# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. +# groups: The results for each group. +# group_id: The group identifier. +# topics: The results for each topic. +# topic_name: The topic name. +# topic_id: The unique topic ID. +# partition_index: The partition index. +# start_offset: The share-partition start offset. +# leader_epoch: The leader epoch of the partition. +# error_code: The partition-level error code, or 0 if there was no error. +# error_message: The partition-level error message, or null if there was no error. +# _tagged_fields: The tagged fields +# _tagged_fields: The tagged fields +# error_code: The group-level error code, or 0 if there was no error. +# error_message: The group-level error message, or null if there was no error. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: AlterPartitionReassignments, 45 -AlterPartitionReassignmentsRequestV0 => timeout_ms {topics} TAG_BUFFER - timeout_ms => INT32 - topics => name {partitions} TAG_BUFFER - name => COMPACT_STRING - partitions => partition_index {replicas} TAG_BUFFER +#ApiKey: AlterShareGroupOffsets, 91 +AlterShareGroupOffsetsRequestV0 => group_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + topics => topic_name {partitions} TAG_BUFFER + topic_name => COMPACT_STRING + partitions => partition_index start_offset TAG_BUFFER partition_index => INT32 - replicas => INT32 + start_offset => INT64 -# timeout_ms: The time in ms to wait for the request to complete. -# topics: The topics to reassign. -# name: The topic name. -# partitions: The partitions to reassign. +# group_id: The group identifier. +# topics: The topics to alter offsets for. +# topic_name: The topic name. +# partitions: Each partition to alter offsets for. # partition_index: The partition index. -# replicas: The replicas to place the partitions on, or null to cancel a pending reassignment for this partition. +# start_offset: The share-partition start offset. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -AlterPartitionReassignmentsResponseV0 => throttle_time_ms error_code error_message {responses} TAG_BUFFER +AlterShareGroupOffsetsResponseV0 => throttle_time_ms error_code error_message {responses} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 error_message => COMPACT_NULLABLE_STRING - responses => name {partitions} TAG_BUFFER - name => COMPACT_STRING + responses => topic_name topic_id {partitions} TAG_BUFFER + topic_name => COMPACT_STRING + topic_id => UUID partitions => partition_index error_code error_message TAG_BUFFER partition_index => INT32 error_code => INT16 @@ -5515,89 +10944,49 @@ AlterPartitionReassignmentsResponseV0 => throttle_time_ms error_code error_messa # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. # error_code: The top-level error code, or 0 if there was no error. # error_message: The top-level error message, or null if there was no error. -# responses: The responses to topics to reassign. -# name: The topic name -# partitions: The responses to partitions to reassign +# responses: The results for each topic. +# topic_name: The topic name. +# topic_id: The unique topic ID. # partition_index: The partition index. -# error_code: The error code for this partition, or 0 if there was no error. -# error_message: The error message for this partition, or null if there was no error. +# error_code: The error code, or 0 if there was no error. +# error_message: The error message, or null if there was no error. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: ListPartitionReassignments, 46 -ListPartitionReassignmentsRequestV0 => timeout_ms {topics} TAG_BUFFER - timeout_ms => INT32 - topics => name {partition_indexes} TAG_BUFFER - name => COMPACT_STRING - partition_indexes => INT32 +#ApiKey: DeleteShareGroupOffsets, 92 +DeleteShareGroupOffsetsRequestV0 => group_id {topics} TAG_BUFFER + group_id => COMPACT_STRING + topics => topic_name TAG_BUFFER + topic_name => COMPACT_STRING -# timeout_ms: The time in ms to wait for the request to complete. -# topics: The topics to list partition reassignments for, or null to list everything. -# name: The topic name -# partition_indexes: The partitions to list partition reassignments for. +# group_id: The group identifier. +# topics: The topics to delete offsets for. +# topic_name: The topic name. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -ListPartitionReassignmentsResponseV0 => throttle_time_ms error_code error_message {topics} TAG_BUFFER +DeleteShareGroupOffsetsResponseV0 => throttle_time_ms error_code error_message {responses} TAG_BUFFER throttle_time_ms => INT32 error_code => INT16 error_message => COMPACT_NULLABLE_STRING - topics => name {partitions} TAG_BUFFER - name => COMPACT_STRING - partitions => partition_index {replicas} {adding_replicas} {removing_replicas} TAG_BUFFER - partition_index => INT32 - replicas => INT32 - adding_replicas => INT32 - removing_replicas => INT32 + responses => topic_name topic_id error_code error_message TAG_BUFFER + topic_name => COMPACT_STRING + topic_id => UUID + error_code => INT16 + error_message => COMPACT_NULLABLE_STRING # throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# error_code: The top-level error code, or 0 if there was no error +# error_code: The top-level error code, or 0 if there was no error. # error_message: The top-level error message, or null if there was no error. -# topics: The ongoing reassignments for each topic. -# name: The topic name. -# partitions: The ongoing reassignments for each partition. -# partition_index: The index of the partition. -# replicas: The current replica set. -# adding_replicas: The set of replicas we are currently adding. -# removing_replicas: The set of replicas we are currently removing. -# _tagged_fields: The tagged fields +# responses: The results for each topic. +# topic_name: The topic name. +# topic_id: The unique topic ID. +# error_code: The topic-level error code, or 0 if there was no error. +# error_message: The topic-level error message, or null if there was no error. # _tagged_fields: The tagged fields # _tagged_fields: The tagged fields -#ApiKey: OffsetDelete, 47 -OffsetDeleteRequestV0 => group_id [topics] - group_id => STRING - topics => name [partitions] - name => STRING - partitions => partition_index - partition_index => INT32 - -# group_id: The unique group identifier. -# topics: The topics to delete offsets for -# name: The topic name. -# partitions: Each partition to delete offsets for. -# partition_index: The partition index. - - -OffsetDeleteResponseV0 => error_code throttle_time_ms [topics] - error_code => INT16 - throttle_time_ms => INT32 - topics => name [partitions] - name => STRING - partitions => partition_index error_code - partition_index => INT32 - error_code => INT16 - -# error_code: The top-level error code, or 0 if there was no error. -# throttle_time_ms: The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota. -# topics: The responses for each topic. -# name: The topic name. -# partitions: The responses for each partition in the topic. -# partition_index: The partition index. -# error_code: The error code, or 0 if there was no error. - - diff --git a/priv/kafka_protocol_bnf/KafkaProtocolBnf.java b/priv/kafka_protocol_bnf/KafkaProtocolBnf.java index 183c8d0..ecac0f9 100644 --- a/priv/kafka_protocol_bnf/KafkaProtocolBnf.java +++ b/priv/kafka_protocol_bnf/KafkaProtocolBnf.java @@ -119,9 +119,9 @@ public static String toText() { b.append("#ApiKey: "); b.append(key.name); b.append(", "); - b.append(new Integer(key.id).toString()); + b.append(Integer.toString(key.id)); b.append("\n"); - Schema[] requests = key.requestSchemas; + Schema[] requests = key.messageType.requestSchemas(); for (int i = 0; i < requests.length; i++) { Schema schema = requests[i]; // Schema @@ -139,7 +139,7 @@ public static String toText() { } // Responses - Schema[] responses = key.responseSchemas; + Schema[] responses = key.messageType.responseSchemas(); for (int i = 0; i < responses.length; i++) { Schema schema = responses[i]; // Schema diff --git a/priv/kafka_protocol_bnf/build.gradle b/priv/kafka_protocol_bnf/build.gradle index 3ec92dc..dbebc1d 100644 --- a/priv/kafka_protocol_bnf/build.gradle +++ b/priv/kafka_protocol_bnf/build.gradle @@ -2,14 +2,16 @@ apply plugin: 'java' apply plugin: 'application' sourceSets.main.java.srcDirs = ['.'] -mainClassName = 'KafkaProtocolBnf' +application { + mainClass = 'KafkaProtocolBnf' +} repositories { mavenCentral() } dependencies { - compile "org.apache.kafka:kafka-clients:2.4.0" + implementation("org.apache.kafka:kafka-clients:4.1.0") } run { diff --git a/priv/kpro_gen.escript b/priv/kpro_gen.escript index 222d8a1..fbba39a 100755 --- a/priv/kpro_gen.escript +++ b/priv/kpro_gen.escript @@ -253,7 +253,9 @@ generate_ec_clauses() -> fun({Name, Code, _Retriable, _Desc}) -> ["ec(", integer_to_list(Code), ") -> ", string:to_lower(Name)] end, Errors), - [infix(DecodeClauses, ";\n"), ".\n"]. + AllClauses = DecodeClauses ++ [["ec(ErrorCode) -> ErrorCode"]], + [infix(AllClauses, ";\n"), ".\n"]. + generate_ec_hrl_file() -> {ok, Errors} = file:consult("error-codes.eterm"), diff --git a/priv/process_api_keys.py b/priv/process_api_keys.py new file mode 100644 index 0000000..6436c01 --- /dev/null +++ b/priv/process_api_keys.py @@ -0,0 +1,16 @@ + +import re + +def to_snake_case(name): + s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) + return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower() + +with open('priv/kafka.bnf', 'r') as f_in: + with open('priv/api-keys.eterm', 'w') as f_out: + for line in f_in: + if line.startswith('#ApiKey:'): + match = re.search(r'#ApiKey: ([a-zA-Z_]+), ([0-9]+)', line) + if match: + name = match.group(1) + key = match.group(2) + f_out.write(f'{{{to_snake_case(name)}, {key}}}.\n') diff --git a/scripts/setup-test-env.sh b/scripts/setup-test-env.sh index 2fea89c..77aed6e 100755 --- a/scripts/setup-test-env.sh +++ b/scripts/setup-test-env.sh @@ -7,7 +7,7 @@ docker ps > /dev/null || { } KAFKA_IMAGE_VERSION="${KAFKA_IMAGE_VERSION:-1.1.3}" -VERSION="${KAFKA_VERSION:-${1:-4.0.0}}" +VERSION="${KAFKA_VERSION:-${1:-4.1.0}}" case $VERSION in 0.9*) @@ -29,7 +29,7 @@ case $VERSION in VERSION="3.9" ;; 4.*) - VERSION="4.0" + VERSION="4.1" ;; *) echo "Unknown version $VERSION" diff --git a/src/kpro_brokers.erl b/src/kpro_brokers.erl index 2b1bb83..825b038 100644 --- a/src/kpro_brokers.erl +++ b/src/kpro_brokers.erl @@ -197,24 +197,47 @@ discover_coordinator(Connection, Type, Id, Timeout) -> {ok, kpro:make_request(find_coordinator, 0, [{key, Id}])}; ({_, 0}) when Type =:= txn -> {error, {bad_vsn, [{api, find_coordinator}, {type, txn}]}}; - ({_, V}) -> + ({_, V}) when V < 4 -> Fields = [ {key, Id}, {key_type, Type}], + {ok, kpro:make_request(find_coordinator, V, Fields)}; + ({_, V}) -> + Fields = [ {coordinator_keys, [Id]}, {key_type, Type}], {ok, kpro:make_request(find_coordinator, V, Fields)} end , fun(Req) -> kpro_connection:request_sync(Connection, Req, Timeout) end - , fun(#kpro_rsp{msg = Rsp}) -> + , fun(#kpro_rsp{msg = Rsp, vsn = V}) when V =:= 0 -> + ErrorCode = kpro:find(error_code, Rsp), + case ErrorCode =:= ?no_error of + true -> + Host = kpro:find(host, Rsp), + Port = kpro:find(port, Rsp), + {ok, {Host, Port}}; + false -> + {error, ErrorCode} + end; + (#kpro_rsp{msg = Rsp, vsn = V}) when V >= 0 andalso V < 4 -> ErrorCode = kpro:find(error_code, Rsp), - ErrMsg = kpro:find(error_message, Rsp, ?kpro_null), + ErrMsg = kpro:find(error_message, Rsp), case ErrorCode =:= ?no_error of true -> Host = kpro:find(host, Rsp), Port = kpro:find(port, Rsp), {ok, {Host, Port}}; - false when ErrMsg =:= ?kpro_null -> - %% v0 - {error, ErrorCode}; false -> - %% v1 + {error, [{error_code, ErrorCode}, {error_msg, ErrMsg}]} + end; + (#kpro_rsp{msg = Rsp, vsn = _V}) -> + Coordinators = kpro:find(coordinators, Rsp), + %% TODO: handle multiple coordinators in the response + CoordinatorRsp = hd(Coordinators), + ErrorCode = kpro:find(error_code, CoordinatorRsp), + ErrMsg = kpro:find(error_message, CoordinatorRsp), + case ErrorCode =:= ?no_error of + true -> + Host = kpro:find(host, CoordinatorRsp), + Port = kpro:find(port, CoordinatorRsp), + {ok, {Host, Port}}; + false -> {error, [{error_code, ErrorCode}, {error_msg, ErrMsg}]} end end diff --git a/src/kpro_lib.erl b/src/kpro_lib.erl index 6a6ffa0..3eb9192 100644 --- a/src/kpro_lib.erl +++ b/src/kpro_lib.erl @@ -152,6 +152,10 @@ encode(compact_bytes, B) when is_binary(B) orelse is_list(B) -> [encode(unsigned_varint, iolist_size(B) + 1), B]; encode(records, B) -> encode(bytes, B); +encode(compact_records, B) -> + encode(compact_bytes, B); +encode(uuid, ?null) -> <<0:128>>; +encode(uuid, B) when is_binary(B), byte_size(B) =:= 16 -> B; encode(compact_string, ?kpro_null) -> error(not_nullable); encode(compact_nullable_string, ?kpro_null) -> @@ -214,6 +218,11 @@ decode(compact_nullable_string, Bin) -> end; decode(records, Bin) -> decode(bytes, Bin); +decode(compact_records, Bin) -> + decode(compact_bytes, Bin); +decode(uuid, Bin) -> + <> = Bin, + {Value, Rest}; decode(tagged_fields, Bin0) -> {Count, Bin1} = decode(unsigned_varint, Bin0), decode_tagged_fields(Count, Bin1, #{}). diff --git a/src/kpro_req_lib.erl b/src/kpro_req_lib.erl index e76a682..61235d2 100644 --- a/src/kpro_req_lib.erl +++ b/src/kpro_req_lib.erl @@ -135,6 +135,11 @@ metadata(Vsn, Topics) -> -spec metadata(vsn(), all | [topic()], boolean()) -> req(). metadata(Vsn, [], IsAutoCreateAllowed) -> metadata(Vsn, all, IsAutoCreateAllowed); +metadata(Vsn, Topics, IsAutoCreateAllowed) when Vsn >= 4, Vsn =< 7 -> + make(metadata, Vsn, + #{topics => metadata_topics_list(Vsn, Topics), + allow_auto_topic_creation => IsAutoCreateAllowed + }); metadata(Vsn, Topics, IsAutoCreateAllowed) -> make(metadata, Vsn, #{topics => metadata_topics_list(Vsn, Topics), @@ -148,6 +153,8 @@ metadata(Vsn, Topics, IsAutoCreateAllowed) -> %% all later versions expect 'null' for 'all' metadata_topics_list(0, all) -> []; metadata_topics_list(_, all) -> ?kpro_null; +metadata_topics_list(Vsn, Names) when Vsn >= 10 -> + [#{name => Name, topic_id => ?kpro_null, tagged_fields => #{}} || Name <- Names]; metadata_topics_list(_, Names) -> [#{name => Name, tagged_fields => #{}} || Name <- Names]. @@ -183,18 +190,29 @@ list_offsets(Vsn, Topic, Partition, Time0, IsolationLevel, LeaderEpoch) -> {max_num_offsets, 1}]; _ -> %% max_num_offsets is removed since version 1 - [{partition, Partition}, + [{partition_index, Partition}, {timestamp, Time}, {current_leader_epoch, LeaderEpoch} ] end, Fields = - [{replica_id, ?KPRO_REPLICA_ID}, - {isolation_level, IsolationLevel}, - {topics, [ [{topic, Topic}, - {partitions, [ PartitionFields ]}] - ]} - ], + case Vsn of + V when V < 10 -> + [{replica_id, ?KPRO_REPLICA_ID}, + {isolation_level, IsolationLevel}, + {topics, [ [{name, Topic}, + {partitions, [ PartitionFields ]}] + ]} + ]; + _ -> + [{replica_id, ?KPRO_REPLICA_ID}, + {isolation_level, IsolationLevel}, + {topics, [ [{name, Topic}, + {partitions, [ PartitionFields ]}] + ]}, + {timeout_ms, 1000} + ] + end, make(list_offsets, Vsn, Fields). %% @doc Help function to construct a `fetch' request @@ -223,29 +241,77 @@ fetch(Vsn, Topic, Partition, Offset, Opts) -> %% kafka partition leader make use of this number to fence consumers with %% stale metadata. LeaderEpoch = maps:get(leader_epoch, Opts, -1), - %% Rack ID is to allow consumers fetching from closet replica (instead the leader) - RackID = maps:get(rack_id, Opts, ?kpro_null), Fields = - [{replica_id, ?KPRO_REPLICA_ID}, - {max_wait_time, MaxWaitTime}, - {max_bytes, MaxBytes}, - {min_bytes, MinBytes}, - {isolation_level, IsolationLevel}, - {session_id, SessionID}, - {session_epoch, Epoch}, - {topics,[[{topic, Topic}, - {partitions, - [[{partition, Partition}, - {fetch_offset, Offset}, - {partition_max_bytes, MaxBytes}, - {log_start_offset, -1}, %% irelevant to clients - {current_leader_epoch, LeaderEpoch} - ]]}]]}, - % we always fetch from one single topic-partition - % never need to forget any - {forgotten_topics_data, []}, - {rack_id, RackID} - ], + case Vsn of + V when V < 12 -> + [{replica_id, ?KPRO_REPLICA_ID}, + {max_wait_ms, MaxWaitTime}, + {max_bytes, MaxBytes}, + {min_bytes, MinBytes}, + {isolation_level, IsolationLevel}, + {session_id, SessionID}, + {session_epoch, Epoch}, + {topics,[[{topic, Topic}, + {partitions, + [[{partition, Partition}, + {fetch_offset, Offset}, + {partition_max_bytes, MaxBytes}, + {log_start_offset, -1}, %% irelevant to clients + {current_leader_epoch, LeaderEpoch} + ]]}]]}, + % we always fetch from one single topic-partition + % never need to forget any + {forgotten_topics_data, []}, + %% Rack ID is to allow consumers fetching from closet replica (instead the leader) + {rack_id, maps:get(rack_id, Opts, ?kpro_null)} + ]; + V when V =:= 12 -> + [{replica_id, ?KPRO_REPLICA_ID}, + {max_wait_ms, MaxWaitTime}, + {max_bytes, MaxBytes}, + {min_bytes, MinBytes}, + {isolation_level, IsolationLevel}, + {session_id, SessionID}, + {session_epoch, Epoch}, + {topics,[[{topic, Topic}, + {partitions, + [[{partition, Partition}, + {fetch_offset, Offset}, + {partition_max_bytes, MaxBytes}, + {log_start_offset, -1}, %% irelevant to clients + {last_fetched_epoch, -1}, + {current_leader_epoch, LeaderEpoch} + ]]}]]}, + % we always fetch from one single topic-partition + % never need to forget any + {forgotten_topics_data, []}, + %% Rack ID is to allow consumers fetching from closet replica (instead the leader) + {rack_id, maps:get(rack_id, Opts, <<>>)} + ]; + _ -> + [{replica_id, ?KPRO_REPLICA_ID}, + {max_wait_ms, MaxWaitTime}, + {max_bytes, MaxBytes}, + {min_bytes, MinBytes}, + {isolation_level, IsolationLevel}, + {session_id, SessionID}, + {session_epoch, Epoch}, + {topics,[[{topic_id, Topic}, + {partitions, + [[{partition, Partition}, + {fetch_offset, Offset}, + {partition_max_bytes, MaxBytes}, + {log_start_offset, -1}, %% irelevant to clients + {last_fetched_epoch, -1}, + {current_leader_epoch, LeaderEpoch} + ]]}]]}, + % we always fetch from one single topic-partition + % never need to forget any + {forgotten_topics_data, []}, + %% Rack ID is to allow consumers fetching from closet replica (instead the leader) + {rack_id, maps:get(rack_id, Opts, <<>>)} + ] + end, make(fetch, Vsn, Fields). %% @doc Help function to construct a produce request. diff --git a/src/kpro_schema.erl b/src/kpro_schema.erl index 6509670..25b51b8 100644 --- a/src/kpro_schema.erl +++ b/src/kpro_schema.erl @@ -45,8 +45,41 @@ elect_leaders, incremental_alter_configs, alter_partition_reassignments, list_partition_reassignments, -offset_delete]. +offset_delete, +describe_client_quotas, +alter_client_quotas, +describe_user_scram_credentials, +alter_user_scram_credentials, +fetch_snapshot, +describe_cluster, +describe_producers, +unregister_broker, +describe_transactions, +list_transactions, +consumer_group_heartbeat, +consumer_group_describe, +controller_registration, +get_telemetry_subscriptions, +push_telemetry, +assign_replicas_to_dirs, +list_config_resources, +describe_topic_partitions, +share_group_heartbeat, +share_group_describe, +share_fetch, +share_acknowledge, +add_raft_voter, +remove_raft_voter, +update_raft_voter, +streams_group_heartbeat, +streams_group_describe, +describe_share_group_offsets, +alter_share_group_offsets, +delete_share_group_offsets]. +min_flexible_vsn(produce) -> 9; +min_flexible_vsn(fetch) -> 12; +min_flexible_vsn(list_offsets) -> 6; min_flexible_vsn(metadata) -> 9; min_flexible_vsn(offset_commit) -> 8; min_flexible_vsn(offset_fetch) -> 6; @@ -60,58 +93,136 @@ min_flexible_vsn(list_groups) -> 3; min_flexible_vsn(api_versions) -> 3; min_flexible_vsn(create_topics) -> 5; min_flexible_vsn(delete_topics) -> 4; +min_flexible_vsn(delete_records) -> 2; min_flexible_vsn(init_producer_id) -> 2; +min_flexible_vsn(offset_for_leader_epoch) -> 4; +min_flexible_vsn(add_partitions_to_txn) -> 3; +min_flexible_vsn(add_offsets_to_txn) -> 3; +min_flexible_vsn(end_txn) -> 3; +min_flexible_vsn(txn_offset_commit) -> 3; +min_flexible_vsn(describe_acls) -> 2; +min_flexible_vsn(create_acls) -> 2; +min_flexible_vsn(delete_acls) -> 2; +min_flexible_vsn(describe_configs) -> 4; +min_flexible_vsn(alter_configs) -> 2; +min_flexible_vsn(alter_replica_log_dirs) -> 2; +min_flexible_vsn(describe_log_dirs) -> 2; +min_flexible_vsn(sasl_authenticate) -> 2; +min_flexible_vsn(create_partitions) -> 2; min_flexible_vsn(create_delegation_token) -> 2; +min_flexible_vsn(renew_delegation_token) -> 2; +min_flexible_vsn(expire_delegation_token) -> 2; +min_flexible_vsn(describe_delegation_token) -> 2; min_flexible_vsn(delete_groups) -> 2; min_flexible_vsn(elect_leaders) -> 2; min_flexible_vsn(incremental_alter_configs) -> 1; min_flexible_vsn(alter_partition_reassignments) -> 0; min_flexible_vsn(list_partition_reassignments) -> 0; +min_flexible_vsn(describe_client_quotas) -> 1; +min_flexible_vsn(alter_client_quotas) -> 1; +min_flexible_vsn(describe_user_scram_credentials) -> 0; +min_flexible_vsn(alter_user_scram_credentials) -> 0; +min_flexible_vsn(fetch_snapshot) -> 0; +min_flexible_vsn(describe_cluster) -> 0; +min_flexible_vsn(describe_producers) -> 0; +min_flexible_vsn(unregister_broker) -> 0; +min_flexible_vsn(describe_transactions) -> 0; +min_flexible_vsn(list_transactions) -> 0; +min_flexible_vsn(consumer_group_heartbeat) -> 0; +min_flexible_vsn(consumer_group_describe) -> 0; +min_flexible_vsn(controller_registration) -> 0; +min_flexible_vsn(get_telemetry_subscriptions) -> 0; +min_flexible_vsn(push_telemetry) -> 0; +min_flexible_vsn(assign_replicas_to_dirs) -> 0; +min_flexible_vsn(list_config_resources) -> 0; +min_flexible_vsn(describe_topic_partitions) -> 0; +min_flexible_vsn(share_group_heartbeat) -> 1; +min_flexible_vsn(share_group_describe) -> 1; +min_flexible_vsn(share_fetch) -> 1; +min_flexible_vsn(share_acknowledge) -> 1; +min_flexible_vsn(add_raft_voter) -> 0; +min_flexible_vsn(remove_raft_voter) -> 0; +min_flexible_vsn(update_raft_voter) -> 0; +min_flexible_vsn(streams_group_heartbeat) -> 0; +min_flexible_vsn(streams_group_describe) -> 0; +min_flexible_vsn(describe_share_group_offsets) -> 0; +min_flexible_vsn(alter_share_group_offsets) -> 0; +min_flexible_vsn(delete_share_group_offsets) -> 0; min_flexible_vsn(_) -> 9999. -vsn_range(produce) -> {0, 8}; -vsn_range(fetch) -> {0, 11}; -vsn_range(list_offsets) -> {0, 5}; -vsn_range(metadata) -> {0, 9}; -vsn_range(offset_commit) -> {0, 8}; -vsn_range(offset_fetch) -> {0, 6}; -vsn_range(find_coordinator) -> {0, 3}; -vsn_range(join_group) -> {0, 6}; +vsn_range(produce) -> {3, 13}; +vsn_range(fetch) -> {4, 18}; +vsn_range(list_offsets) -> {1, 10}; +vsn_range(metadata) -> {0, 13}; +vsn_range(offset_commit) -> {2, 10}; +vsn_range(offset_fetch) -> {1, 10}; +vsn_range(find_coordinator) -> {0, 6}; +vsn_range(join_group) -> {0, 9}; vsn_range(heartbeat) -> {0, 4}; -vsn_range(leave_group) -> {0, 4}; -vsn_range(sync_group) -> {0, 4}; -vsn_range(describe_groups) -> {0, 5}; -vsn_range(list_groups) -> {0, 3}; +vsn_range(leave_group) -> {0, 5}; +vsn_range(sync_group) -> {0, 5}; +vsn_range(describe_groups) -> {0, 6}; +vsn_range(list_groups) -> {0, 5}; vsn_range(sasl_handshake) -> {0, 1}; -vsn_range(api_versions) -> {0, 3}; -vsn_range(create_topics) -> {0, 5}; -vsn_range(delete_topics) -> {0, 4}; -vsn_range(delete_records) -> {0, 1}; -vsn_range(init_producer_id) -> {0, 2}; -vsn_range(offset_for_leader_epoch) -> {0, 3}; -vsn_range(add_partitions_to_txn) -> {0, 1}; -vsn_range(add_offsets_to_txn) -> {0, 1}; -vsn_range(end_txn) -> {0, 1}; -vsn_range(txn_offset_commit) -> {0, 2}; -vsn_range(describe_acls) -> {0, 1}; -vsn_range(create_acls) -> {0, 1}; -vsn_range(delete_acls) -> {0, 1}; -vsn_range(describe_configs) -> {0, 2}; -vsn_range(alter_configs) -> {0, 1}; -vsn_range(alter_replica_log_dirs) -> {0, 1}; -vsn_range(describe_log_dirs) -> {0, 1}; -vsn_range(sasl_authenticate) -> {0, 1}; -vsn_range(create_partitions) -> {0, 1}; -vsn_range(create_delegation_token) -> {0, 2}; -vsn_range(renew_delegation_token) -> {0, 1}; -vsn_range(expire_delegation_token) -> {0, 1}; -vsn_range(describe_delegation_token) -> {0, 1}; +vsn_range(api_versions) -> {0, 4}; +vsn_range(create_topics) -> {2, 7}; +vsn_range(delete_topics) -> {1, 6}; +vsn_range(delete_records) -> {0, 2}; +vsn_range(init_producer_id) -> {0, 6}; +vsn_range(offset_for_leader_epoch) -> {2, 4}; +vsn_range(add_partitions_to_txn) -> {0, 5}; +vsn_range(add_offsets_to_txn) -> {0, 4}; +vsn_range(end_txn) -> {0, 5}; +vsn_range(txn_offset_commit) -> {0, 5}; +vsn_range(describe_acls) -> {1, 3}; +vsn_range(create_acls) -> {1, 3}; +vsn_range(delete_acls) -> {1, 3}; +vsn_range(describe_configs) -> {1, 4}; +vsn_range(alter_configs) -> {0, 2}; +vsn_range(alter_replica_log_dirs) -> {1, 2}; +vsn_range(describe_log_dirs) -> {1, 4}; +vsn_range(sasl_authenticate) -> {0, 2}; +vsn_range(create_partitions) -> {0, 3}; +vsn_range(create_delegation_token) -> {1, 3}; +vsn_range(renew_delegation_token) -> {1, 2}; +vsn_range(expire_delegation_token) -> {1, 2}; +vsn_range(describe_delegation_token) -> {1, 3}; vsn_range(delete_groups) -> {0, 2}; vsn_range(elect_leaders) -> {0, 2}; vsn_range(incremental_alter_configs) -> {0, 1}; -vsn_range(alter_partition_reassignments) -> {0, 0}; +vsn_range(alter_partition_reassignments) -> {0, 1}; vsn_range(list_partition_reassignments) -> {0, 0}; vsn_range(offset_delete) -> {0, 0}; +vsn_range(describe_client_quotas) -> {0, 1}; +vsn_range(alter_client_quotas) -> {0, 1}; +vsn_range(describe_user_scram_credentials) -> {0, 0}; +vsn_range(alter_user_scram_credentials) -> {0, 0}; +vsn_range(fetch_snapshot) -> {0, 1}; +vsn_range(describe_cluster) -> {0, 2}; +vsn_range(describe_producers) -> {0, 0}; +vsn_range(unregister_broker) -> {0, 0}; +vsn_range(describe_transactions) -> {0, 0}; +vsn_range(list_transactions) -> {0, 2}; +vsn_range(consumer_group_heartbeat) -> {0, 1}; +vsn_range(consumer_group_describe) -> {0, 1}; +vsn_range(controller_registration) -> {0, 0}; +vsn_range(get_telemetry_subscriptions) -> {0, 0}; +vsn_range(push_telemetry) -> {0, 0}; +vsn_range(assign_replicas_to_dirs) -> {0, 0}; +vsn_range(list_config_resources) -> {0, 1}; +vsn_range(describe_topic_partitions) -> {0, 0}; +vsn_range(share_group_heartbeat) -> {1, 1}; +vsn_range(share_group_describe) -> {1, 1}; +vsn_range(share_fetch) -> {1, 1}; +vsn_range(share_acknowledge) -> {1, 1}; +vsn_range(add_raft_voter) -> {0, 0}; +vsn_range(remove_raft_voter) -> {0, 0}; +vsn_range(update_raft_voter) -> {0, 0}; +vsn_range(streams_group_heartbeat) -> {0, 0}; +vsn_range(streams_group_describe) -> {0, 0}; +vsn_range(describe_share_group_offsets) -> {0, 0}; +vsn_range(alter_share_group_offsets) -> {0, 0}; +vsn_range(delete_share_group_offsets) -> {0, 0}; vsn_range(_) -> false. api_key(produce) -> 0; @@ -200,41 +311,107 @@ api_key(list_partition_reassignments) -> 46; api_key(46) -> list_partition_reassignments; api_key(offset_delete) -> 47; api_key(47) -> offset_delete; +api_key(describe_client_quotas) -> 48; +api_key(48) -> describe_client_quotas; +api_key(alter_client_quotas) -> 49; +api_key(49) -> alter_client_quotas; +api_key(describe_user_scram_credentials) -> 50; +api_key(50) -> describe_user_scram_credentials; +api_key(alter_user_scram_credentials) -> 51; +api_key(51) -> alter_user_scram_credentials; +api_key(fetch_snapshot) -> 59; +api_key(59) -> fetch_snapshot; +api_key(describe_cluster) -> 60; +api_key(60) -> describe_cluster; +api_key(describe_producers) -> 61; +api_key(61) -> describe_producers; +api_key(unregister_broker) -> 64; +api_key(64) -> unregister_broker; +api_key(describe_transactions) -> 65; +api_key(65) -> describe_transactions; +api_key(list_transactions) -> 66; +api_key(66) -> list_transactions; +api_key(consumer_group_heartbeat) -> 68; +api_key(68) -> consumer_group_heartbeat; +api_key(consumer_group_describe) -> 69; +api_key(69) -> consumer_group_describe; +api_key(controller_registration) -> 70; +api_key(70) -> controller_registration; +api_key(get_telemetry_subscriptions) -> 71; +api_key(71) -> get_telemetry_subscriptions; +api_key(push_telemetry) -> 72; +api_key(72) -> push_telemetry; +api_key(assign_replicas_to_dirs) -> 73; +api_key(73) -> assign_replicas_to_dirs; +api_key(list_config_resources) -> 74; +api_key(74) -> list_config_resources; +api_key(describe_topic_partitions) -> 75; +api_key(75) -> describe_topic_partitions; +api_key(share_group_heartbeat) -> 76; +api_key(76) -> share_group_heartbeat; +api_key(share_group_describe) -> 77; +api_key(77) -> share_group_describe; +api_key(share_fetch) -> 78; +api_key(78) -> share_fetch; +api_key(share_acknowledge) -> 79; +api_key(79) -> share_acknowledge; +api_key(add_raft_voter) -> 80; +api_key(80) -> add_raft_voter; +api_key(remove_raft_voter) -> 81; +api_key(81) -> remove_raft_voter; +api_key(update_raft_voter) -> 82; +api_key(82) -> update_raft_voter; +api_key(streams_group_heartbeat) -> 88; +api_key(88) -> streams_group_heartbeat; +api_key(streams_group_describe) -> 89; +api_key(89) -> streams_group_describe; +api_key(describe_share_group_offsets) -> 90; +api_key(90) -> describe_share_group_offsets; +api_key(alter_share_group_offsets) -> 91; +api_key(91) -> alter_share_group_offsets; +api_key(delete_share_group_offsets) -> 92; +api_key(92) -> delete_share_group_offsets; api_key(API) -> erlang:error({not_supported, API}). -req(produce, V) when V >= 0, V =< 2 -> - [{acks,int16}, - {timeout,int32}, - {topic_data,{array,[{topic,string}, - {data,{array,[{partition,int32}, - {record_set,records}]}}]}}]; req(produce, V) when V >= 3, V =< 8 -> [{transactional_id,nullable_string}, {acks,int16}, - {timeout,int32}, - {topic_data,{array,[{topic,string}, - {data,{array,[{partition,int32}, - {record_set,records}]}}]}}]; -req(fetch, V) when V >= 0, V =< 2 -> - [{replica_id,int32}, - {max_wait_time,int32}, - {min_bytes,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, - {fetch_offset,int64}, - {partition_max_bytes,int32}]}}]}}]; -req(fetch, 3) -> - [{replica_id,int32}, - {max_wait_time,int32}, - {min_bytes,int32}, - {max_bytes,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, - {fetch_offset,int64}, - {partition_max_bytes,int32}]}}]}}]; + {timeout_ms,int32}, + {topic_data, + {array, + [{name,string}, + {partition_data,{array,[{index,int32},{records,records}]}}]}}]; +req(produce, V) when V >= 9, V =< 12 -> + [{transactional_id,compact_nullable_string}, + {acks,int16}, + {timeout_ms,int32}, + {topic_data, + {compact_array, + [{name,compact_string}, + {partition_data, + {compact_array, + [{index,int32}, + {records,compact_records}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(produce, 13) -> + [{transactional_id,compact_nullable_string}, + {acks,int16}, + {timeout_ms,int32}, + {topic_data, + {compact_array, + [{topic_id,uuid}, + {partition_data, + {compact_array, + [{index,int32}, + {records,compact_records}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(fetch, 4) -> [{replica_id,int32}, - {max_wait_time,int32}, + {max_wait_ms,int32}, {min_bytes,int32}, {max_bytes,int32}, {isolation_level,int8}, @@ -244,7 +421,7 @@ req(fetch, 4) -> {partition_max_bytes,int32}]}}]}}]; req(fetch, V) when V >= 5, V =< 6 -> [{replica_id,int32}, - {max_wait_time,int32}, + {max_wait_ms,int32}, {min_bytes,int32}, {max_bytes,int32}, {isolation_level,int8}, @@ -255,7 +432,7 @@ req(fetch, V) when V >= 5, V =< 6 -> {partition_max_bytes,int32}]}}]}}]; req(fetch, V) when V >= 7, V =< 8 -> [{replica_id,int32}, - {max_wait_time,int32}, + {max_wait_ms,int32}, {min_bytes,int32}, {max_bytes,int32}, {isolation_level,int8}, @@ -281,7 +458,7 @@ req(fetch, V) when V >= 7, V =< 8 -> {partition_max_bytes,int32}]}}]}}]; req(fetch, V) when V >= 9, V =< 10 -> [{replica_id,int32}, - {max_wait_time,int32}, + {max_wait_ms,int32}, {min_bytes,int32}, {max_bytes,int32}, {isolation_level,int8}, @@ -309,7 +486,7 @@ req(fetch, V) when V >= 9, V =< 10 -> {partition_max_bytes,int32}]}}]}}]; req(fetch, 11) -> [{replica_id,int32}, - {max_wait_time,int32}, + {max_wait_ms,int32}, {min_bytes,int32}, {max_bytes,int32}, {isolation_level,int8}, @@ -336,30 +513,160 @@ req(fetch, 11) -> {log_start_offset,int64}, {partition_max_bytes,int32}]}}]}}, {rack_id,string}]; -req(list_offsets, 0) -> +req(fetch, 12) -> [{replica_id,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, - {timestamp,int64}, - {max_num_offsets,int32}]}}]}}]; + {max_wait_ms,int32}, + {min_bytes,int32}, + {max_bytes,int32}, + {isolation_level,int8}, + {session_id,int32}, + {session_epoch,int32}, + {topics, + {compact_array, + [{topic,compact_string}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {fetch_offset,int64}, + {last_fetched_epoch,int32}, + {log_start_offset,int64}, + {partition_max_bytes,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {forgotten_topics_data, + {compact_array, + [{topic,compact_string}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {fetch_offset,int64}, + {last_fetched_epoch,int32}, + {log_start_offset,int64}, + {partition_max_bytes,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {rack_id,compact_string}, + {tagged_fields,tagged_fields}]; +req(fetch, V) when V >= 13, V =< 14 -> + [{replica_id,int32}, + {max_wait_ms,int32}, + {min_bytes,int32}, + {max_bytes,int32}, + {isolation_level,int8}, + {session_id,int32}, + {session_epoch,int32}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {fetch_offset,int64}, + {last_fetched_epoch,int32}, + {log_start_offset,int64}, + {partition_max_bytes,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {forgotten_topics_data, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {fetch_offset,int64}, + {last_fetched_epoch,int32}, + {log_start_offset,int64}, + {partition_max_bytes,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {rack_id,compact_string}, + {tagged_fields,tagged_fields}]; +req(fetch, V) when V >= 15, V =< 18 -> + [{max_wait_ms,int32}, + {min_bytes,int32}, + {max_bytes,int32}, + {isolation_level,int8}, + {session_id,int32}, + {session_epoch,int32}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {fetch_offset,int64}, + {last_fetched_epoch,int32}, + {log_start_offset,int64}, + {partition_max_bytes,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {forgotten_topics_data, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {fetch_offset,int64}, + {last_fetched_epoch,int32}, + {log_start_offset,int64}, + {partition_max_bytes,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {rack_id,compact_string}, + {tagged_fields,tagged_fields}]; req(list_offsets, 1) -> [{replica_id,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, {timestamp,int64}]}}]}}]; req(list_offsets, V) when V >= 2, V =< 3 -> [{replica_id,int32}, {isolation_level,int8}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, {timestamp,int64}]}}]}}]; req(list_offsets, V) when V >= 4, V =< 5 -> [{replica_id,int32}, {isolation_level,int8}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, {current_leader_epoch,int32}, {timestamp,int64}]}}]}}]; +req(list_offsets, V) when V >= 6, V =< 9 -> + [{replica_id,int32}, + {isolation_level,int8}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {current_leader_epoch,int32}, + {timestamp,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(list_offsets, 10) -> + [{replica_id,int32}, + {isolation_level,int8}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {current_leader_epoch,int32}, + {timestamp,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {timeout_ms,int32}, + {tagged_fields,tagged_fields}]; req(metadata, V) when V >= 0, V =< 3 -> [{topics,{array,[{name,string}]}}]; req(metadata, V) when V >= 4, V =< 7 -> @@ -376,32 +683,24 @@ req(metadata, 9) -> {include_cluster_authorized_operations,boolean}, {include_topic_authorized_operations,boolean}, {tagged_fields,tagged_fields}]; -req(offset_commit, 0) -> - [{group_id,string}, - {topics, - {array, - [{name,string}, - {partitions, - {array, - [{partition_index,int32}, - {committed_offset,int64}, - {committed_metadata,nullable_string}]}}]}}]; -req(offset_commit, 1) -> - [{group_id,string}, - {generation_id,int32}, - {member_id,string}, - {topics, - {array, - [{name,string}, - {partitions, - {array, - [{partition_index,int32}, - {committed_offset,int64}, - {commit_timestamp,int64}, - {committed_metadata,nullable_string}]}}]}}]; +req(metadata, 10) -> + [{topics,{compact_array,[{topic_id,uuid}, + {name,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {allow_auto_topic_creation,boolean}, + {include_cluster_authorized_operations,boolean}, + {include_topic_authorized_operations,boolean}, + {tagged_fields,tagged_fields}]; +req(metadata, V) when V >= 11, V =< 13 -> + [{topics,{compact_array,[{topic_id,uuid}, + {name,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {allow_auto_topic_creation,boolean}, + {include_topic_authorized_operations,boolean}, + {tagged_fields,tagged_fields}]; req(offset_commit, V) when V >= 2, V =< 4 -> [{group_id,string}, - {generation_id,int32}, + {generation_id_or_member_epoch,int32}, {member_id,string}, {retention_time_ms,int64}, {topics, @@ -414,7 +713,7 @@ req(offset_commit, V) when V >= 2, V =< 4 -> {committed_metadata,nullable_string}]}}]}}]; req(offset_commit, 5) -> [{group_id,string}, - {generation_id,int32}, + {generation_id_or_member_epoch,int32}, {member_id,string}, {topics, {array, @@ -426,7 +725,7 @@ req(offset_commit, 5) -> {committed_metadata,nullable_string}]}}]}}]; req(offset_commit, 6) -> [{group_id,string}, - {generation_id,int32}, + {generation_id_or_member_epoch,int32}, {member_id,string}, {topics, {array, @@ -439,7 +738,7 @@ req(offset_commit, 6) -> {committed_metadata,nullable_string}]}}]}}]; req(offset_commit, 7) -> [{group_id,string}, - {generation_id,int32}, + {generation_id_or_member_epoch,int32}, {member_id,string}, {group_instance_id,nullable_string}, {topics, @@ -451,9 +750,9 @@ req(offset_commit, 7) -> {committed_offset,int64}, {committed_leader_epoch,int32}, {committed_metadata,nullable_string}]}}]}}]; -req(offset_commit, 8) -> +req(offset_commit, V) when V >= 8, V =< 9 -> [{group_id,compact_string}, - {generation_id,int32}, + {generation_id_or_member_epoch,int32}, {member_id,compact_string}, {group_instance_id,compact_nullable_string}, {topics, @@ -468,7 +767,24 @@ req(offset_commit, 8) -> {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -req(offset_fetch, V) when V >= 0, V =< 5 -> +req(offset_commit, 10) -> + [{group_id,compact_string}, + {generation_id_or_member_epoch,int32}, + {member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {committed_offset,int64}, + {committed_leader_epoch,int32}, + {committed_metadata,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(offset_fetch, V) when V >= 1, V =< 5 -> [{group_id,string}, {topics,{array,[{name,string},{partition_indexes,{array,int32}}]}}]; req(offset_fetch, 6) -> @@ -477,12 +793,63 @@ req(offset_fetch, 6) -> {partition_indexes,{compact_array,int32}}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; +req(offset_fetch, 7) -> + [{group_id,compact_string}, + {topics,{compact_array,[{name,compact_string}, + {partition_indexes,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {require_stable,boolean}, + {tagged_fields,tagged_fields}]; +req(offset_fetch, 8) -> + [{groups, + {compact_array, + [{group_id,compact_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partition_indexes,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {require_stable,boolean}, + {tagged_fields,tagged_fields}]; +req(offset_fetch, 9) -> + [{groups, + {compact_array, + [{group_id,compact_string}, + {member_id,compact_nullable_string}, + {member_epoch,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {partition_indexes,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {require_stable,boolean}, + {tagged_fields,tagged_fields}]; +req(offset_fetch, 10) -> + [{groups, + {compact_array, + [{group_id,compact_string}, + {member_id,compact_nullable_string}, + {member_epoch,int32}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partition_indexes,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {require_stable,boolean}, + {tagged_fields,tagged_fields}]; req(find_coordinator, 0) -> [{key,string}]; req(find_coordinator, V) when V >= 1, V =< 2 -> [{key,string},{key_type,int8}]; req(find_coordinator, 3) -> [{key,compact_string},{key_type,int8},{tagged_fields,tagged_fields}]; +req(find_coordinator, V) when V >= 4, V =< 6 -> + [{key_type,int8}, + {coordinator_keys,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]; req(join_group, 0) -> [{group_id,string}, {session_timeout_ms,int32}, @@ -504,7 +871,18 @@ req(join_group, 5) -> {group_instance_id,nullable_string}, {protocol_type,string}, {protocols,{array,[{name,string},{metadata,bytes}]}}]; -req(join_group, 6) -> +req(join_group, V) when V >= 6, V =< 7 -> + [{group_id,compact_string}, + {session_timeout_ms,int32}, + {rebalance_timeout_ms,int32}, + {member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {protocol_type,compact_string}, + {protocols,{compact_array,[{name,compact_string}, + {metadata,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(join_group, V) when V >= 8, V =< 9 -> [{group_id,compact_string}, {session_timeout_ms,int32}, {rebalance_timeout_ms,int32}, @@ -514,6 +892,7 @@ req(join_group, 6) -> {protocols,{compact_array,[{name,compact_string}, {metadata,compact_bytes}, {tagged_fields,tagged_fields}]}}, + {reason,compact_nullable_string}, {tagged_fields,tagged_fields}]; req(heartbeat, V) when V >= 0, V =< 2 -> [{group_id,string},{generation_id,int32},{member_id,string}]; @@ -539,6 +918,13 @@ req(leave_group, 4) -> {group_instance_id,compact_nullable_string}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; +req(leave_group, 5) -> + [{group_id,compact_string}, + {members,{compact_array,[{member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {reason,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(sync_group, V) when V >= 0, V =< 2 -> [{group_id,string}, {generation_id,int32}, @@ -559,11 +945,22 @@ req(sync_group, 4) -> {assignment,compact_bytes}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; +req(sync_group, 5) -> + [{group_id,compact_string}, + {generation_id,int32}, + {member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {protocol_type,compact_nullable_string}, + {protocol_name,compact_nullable_string}, + {assignments,{compact_array,[{member_id,compact_string}, + {assignment,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(describe_groups, V) when V >= 0, V =< 2 -> [{groups,{array,string}}]; req(describe_groups, V) when V >= 3, V =< 4 -> [{groups,{array,string}},{include_authorized_operations,boolean}]; -req(describe_groups, 5) -> +req(describe_groups, V) when V >= 5, V =< 6 -> [{groups,{compact_array,compact_string}}, {include_authorized_operations,boolean}, {tagged_fields,tagged_fields}]; @@ -571,25 +968,22 @@ req(list_groups, V) when V >= 0, V =< 2 -> []; req(list_groups, 3) -> [{tagged_fields,tagged_fields}]; +req(list_groups, 4) -> + [{states_filter,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]; +req(list_groups, 5) -> + [{states_filter,{compact_array,compact_string}}, + {types_filter,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]; req(sasl_handshake, V) when V >= 0, V =< 1 -> [{mechanism,string}]; req(api_versions, V) when V >= 0, V =< 2 -> []; -req(api_versions, 3) -> +req(api_versions, V) when V >= 3, V =< 4 -> [{client_software_name,compact_string}, {client_software_version,compact_string}, {tagged_fields,tagged_fields}]; -req(create_topics, 0) -> - [{topics, - {array, - [{name,string}, - {num_partitions,int32}, - {replication_factor,int16}, - {assignments, - {array,[{partition_index,int32},{broker_ids,{array,int32}}]}}, - {configs,{array,[{name,string},{value,nullable_string}]}}]}}, - {timeout_ms,int32}]; -req(create_topics, V) when V >= 1, V =< 4 -> +req(create_topics, V) when V >= 2, V =< 4 -> [{topics, {array, [{name,string}, @@ -600,7 +994,7 @@ req(create_topics, V) when V >= 1, V =< 4 -> {configs,{array,[{name,string},{value,nullable_string}]}}]}}, {timeout_ms,int32}, {validate_only,boolean}]; -req(create_topics, 5) -> +req(create_topics, V) when V >= 5, V =< 7 -> [{topics, {compact_array, [{name,compact_string}, @@ -620,26 +1014,55 @@ req(create_topics, 5) -> {timeout_ms,int32}, {validate_only,boolean}, {tagged_fields,tagged_fields}]; -req(delete_topics, V) when V >= 0, V =< 3 -> +req(delete_topics, V) when V >= 1, V =< 3 -> [{topic_names,{array,string}},{timeout_ms,int32}]; -req(delete_topics, 4) -> +req(delete_topics, V) when V >= 4, V =< 5 -> [{topic_names,{compact_array,compact_string}}, {timeout_ms,int32}, {tagged_fields,tagged_fields}]; +req(delete_topics, 6) -> + [{topics,{compact_array,[{name,compact_nullable_string}, + {topic_id,uuid}, + {tagged_fields,tagged_fields}]}}, + {timeout_ms,int32}, + {tagged_fields,tagged_fields}]; req(delete_records, V) when V >= 0, V =< 1 -> - [{topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32},{offset,int64}]}}]}}, - {timeout,int32}]; + [{topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {offset,int64}]}}]}}, + {timeout_ms,int32}]; +req(delete_records, 2) -> + [{topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {offset,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {timeout_ms,int32}, + {tagged_fields,tagged_fields}]; req(init_producer_id, V) when V >= 0, V =< 1 -> [{transactional_id,nullable_string},{transaction_timeout_ms,int32}]; req(init_producer_id, 2) -> [{transactional_id,compact_nullable_string}, {transaction_timeout_ms,int32}, {tagged_fields,tagged_fields}]; -req(offset_for_leader_epoch, V) when V >= 0, V =< 1 -> - [{topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, - {leader_epoch,int32}]}}]}}]; +req(init_producer_id, V) when V >= 3, V =< 5 -> + [{transactional_id,compact_nullable_string}, + {transaction_timeout_ms,int32}, + {producer_id,int64}, + {producer_epoch,int16}, + {tagged_fields,tagged_fields}]; +req(init_producer_id, 6) -> + [{transactional_id,compact_nullable_string}, + {transaction_timeout_ms,int32}, + {producer_id,int64}, + {producer_epoch,int16}, + {enable2_pc,boolean}, + {keep_prepared_txn,boolean}, + {tagged_fields,tagged_fields}]; req(offset_for_leader_epoch, 2) -> [{topics,{array,[{topic,string}, {partitions,{array,[{partition,int32}, @@ -651,21 +1074,70 @@ req(offset_for_leader_epoch, 3) -> {partitions,{array,[{partition,int32}, {current_leader_epoch,int32}, {leader_epoch,int32}]}}]}}]; -req(add_partitions_to_txn, V) when V >= 0, V =< 1 -> +req(offset_for_leader_epoch, 4) -> + [{replica_id,int32}, + {topics, + {compact_array, + [{topic,compact_string}, + {partitions, + {compact_array, + [{partition,int32}, + {current_leader_epoch,int32}, + {leader_epoch,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(add_partitions_to_txn, V) when V >= 0, V =< 2 -> + [{v3_and_below_transactional_id,string}, + {v3_and_below_producer_id,int64}, + {v3_and_below_producer_epoch,int16}, + {v3_and_below_topics,{array,[{name,string},{partitions,{array,int32}}]}}]; +req(add_partitions_to_txn, 3) -> + [{v3_and_below_transactional_id,compact_string}, + {v3_and_below_producer_id,int64}, + {v3_and_below_producer_epoch,int16}, + {v3_and_below_topics, + {compact_array, + [{name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(add_partitions_to_txn, V) when V >= 4, V =< 5 -> + [{transactions, + {compact_array, + [{transactional_id,compact_string}, + {producer_id,int64}, + {producer_epoch,int16}, + {verify_only,boolean}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(add_offsets_to_txn, V) when V >= 0, V =< 2 -> [{transactional_id,string}, {producer_id,int64}, {producer_epoch,int16}, - {topics,{array,[{topic,string},{partitions,{array,int32}}]}}]; -req(add_offsets_to_txn, V) when V >= 0, V =< 1 -> - [{transactional_id,string}, + {group_id,string}]; +req(add_offsets_to_txn, V) when V >= 3, V =< 4 -> + [{transactional_id,compact_string}, {producer_id,int64}, {producer_epoch,int16}, - {group_id,string}]; -req(end_txn, V) when V >= 0, V =< 1 -> + {group_id,compact_string}, + {tagged_fields,tagged_fields}]; +req(end_txn, V) when V >= 0, V =< 2 -> [{transactional_id,string}, {producer_id,int64}, {producer_epoch,int16}, - {transaction_result,boolean}]; + {committed,boolean}]; +req(end_txn, V) when V >= 3, V =< 5 -> + [{transactional_id,compact_string}, + {producer_id,int64}, + {producer_epoch,int16}, + {committed,boolean}, + {tagged_fields,tagged_fields}]; req(txn_offset_commit, V) when V >= 0, V =< 1 -> [{transactional_id,string}, {group_id,string}, @@ -693,28 +1165,43 @@ req(txn_offset_commit, 2) -> {committed_offset,int64}, {committed_leader_epoch,int32}, {committed_metadata,nullable_string}]}}]}}]; -req(describe_acls, 0) -> - [{resource_type,int8}, - {resource_name,nullable_string}, - {principal,nullable_string}, - {host,nullable_string}, - {operation,int8}, - {permission_type,int8}]; +req(txn_offset_commit, V) when V >= 3, V =< 5 -> + [{transactional_id,compact_string}, + {group_id,compact_string}, + {producer_id,int64}, + {producer_epoch,int16}, + {generation_id,int32}, + {member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {committed_offset,int64}, + {committed_leader_epoch,int32}, + {committed_metadata,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(describe_acls, 1) -> - [{resource_type,int8}, - {resource_name,nullable_string}, - {resource_pattern_type_filter,int8}, - {principal,nullable_string}, - {host,nullable_string}, + [{resource_type_filter,int8}, + {resource_name_filter,nullable_string}, + {pattern_type_filter,int8}, + {principal_filter,nullable_string}, + {host_filter,nullable_string}, {operation,int8}, {permission_type,int8}]; -req(create_acls, 0) -> - [{creations,{array,[{resource_type,int8}, - {resource_name,string}, - {principal,string}, - {host,string}, - {operation,int8}, - {permission_type,int8}]}}]; +req(describe_acls, V) when V >= 2, V =< 3 -> + [{resource_type_filter,int8}, + {resource_name_filter,compact_nullable_string}, + {pattern_type_filter,int8}, + {principal_filter,compact_nullable_string}, + {host_filter,compact_nullable_string}, + {operation,int8}, + {permission_type,int8}, + {tagged_fields,tagged_fields}]; req(create_acls, 1) -> [{creations,{array,[{resource_type,int8}, {resource_name,string}, @@ -723,56 +1210,120 @@ req(create_acls, 1) -> {host,string}, {operation,int8}, {permission_type,int8}]}}]; -req(delete_acls, 0) -> - [{filters,{array,[{resource_type,int8}, - {resource_name,nullable_string}, - {principal,nullable_string}, - {host,nullable_string}, - {operation,int8}, - {permission_type,int8}]}}]; +req(create_acls, V) when V >= 2, V =< 3 -> + [{creations,{compact_array,[{resource_type,int8}, + {resource_name,compact_string}, + {resource_pattern_type,int8}, + {principal,compact_string}, + {host,compact_string}, + {operation,int8}, + {permission_type,int8}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(delete_acls, 1) -> - [{filters,{array,[{resource_type,int8}, - {resource_name,nullable_string}, - {resource_pattern_type_filter,int8}, - {principal,nullable_string}, - {host,nullable_string}, + [{filters,{array,[{resource_type_filter,int8}, + {resource_name_filter,nullable_string}, + {pattern_type_filter,int8}, + {principal_filter,nullable_string}, + {host_filter,nullable_string}, {operation,int8}, {permission_type,int8}]}}]; -req(describe_configs, 0) -> - [{resources,{array,[{resource_type,int8}, - {resource_name,string}, - {config_names,{array,string}}]}}]; +req(delete_acls, V) when V >= 2, V =< 3 -> + [{filters,{compact_array,[{resource_type_filter,int8}, + {resource_name_filter,compact_nullable_string}, + {pattern_type_filter,int8}, + {principal_filter,compact_nullable_string}, + {host_filter,compact_nullable_string}, + {operation,int8}, + {permission_type,int8}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(describe_configs, V) when V >= 1, V =< 2 -> [{resources,{array,[{resource_type,int8}, {resource_name,string}, - {config_names,{array,string}}]}}, + {configuration_keys,{array,string}}]}}, {include_synonyms,boolean}]; -req(alter_configs, V) when V >= 0, V =< 1 -> +req(describe_configs, 3) -> + [{resources,{array,[{resource_type,int8}, + {resource_name,string}, + {configuration_keys,{array,string}}]}}, + {include_synonyms,boolean}, + {include_documentation,boolean}]; +req(describe_configs, 4) -> [{resources, - {array, + {compact_array, [{resource_type,int8}, - {resource_name,string}, - {config_entries, - {array, - [{config_name,string},{config_value,nullable_string}]}}]}}, + {resource_name,compact_string}, + {configuration_keys,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]}}, + {include_synonyms,boolean}, + {include_documentation,boolean}, + {tagged_fields,tagged_fields}]; +req(alter_configs, V) when V >= 0, V =< 1 -> + [{resources,{array,[{resource_type,int8}, + {resource_name,string}, + {configs,{array,[{name,string}, + {value,nullable_string}]}}]}}, {validate_only,boolean}]; -req(alter_replica_log_dirs, V) when V >= 0, V =< 1 -> - [{log_dirs,{array,[{log_dir,string}, - {topics,{array,[{topic,string}, - {partitions,{array,int32}}]}}]}}]; -req(describe_log_dirs, V) when V >= 0, V =< 1 -> +req(alter_configs, 2) -> + [{resources, + {compact_array, + [{resource_type,int8}, + {resource_name,compact_string}, + {configs, + {compact_array, + [{name,compact_string}, + {value,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {validate_only,boolean}, + {tagged_fields,tagged_fields}]; +req(alter_replica_log_dirs, 1) -> + [{dirs,{array,[{path,string}, + {topics,{array,[{name,string}, + {partitions,{array,int32}}]}}]}}]; +req(alter_replica_log_dirs, 2) -> + [{dirs, + {compact_array, + [{path,compact_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(describe_log_dirs, 1) -> [{topics,{array,[{topic,string},{partitions,{array,int32}}]}}]; +req(describe_log_dirs, V) when V >= 2, V =< 4 -> + [{topics,{compact_array,[{topic,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(sasl_authenticate, V) when V >= 0, V =< 1 -> [{auth_bytes,bytes}]; +req(sasl_authenticate, 2) -> + [{auth_bytes,compact_bytes},{tagged_fields,tagged_fields}]; req(create_partitions, V) when V >= 0, V =< 1 -> - [{topic_partitions, - {array, - [{topic,string}, - {new_partitions, - [{count,int32},{assignment,{array,{array,int32}}}]}]}}, - {timeout,int32}, + [{topics,{array,[{name,string}, + {count,int32}, + {assignments,{array,[{broker_ids,{array,int32}}]}}]}}, + {timeout_ms,int32}, {validate_only,boolean}]; -req(create_delegation_token, V) when V >= 0, V =< 1 -> +req(create_partitions, V) when V >= 2, V =< 3 -> + [{topics, + {compact_array, + [{name,compact_string}, + {count,int32}, + {assignments, + {compact_array, + [{broker_ids,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {timeout_ms,int32}, + {validate_only,boolean}, + {tagged_fields,tagged_fields}]; +req(create_delegation_token, 1) -> [{renewers,{array,[{principal_type,string},{principal_name,string}]}}, {max_lifetime_ms,int64}]; req(create_delegation_token, 2) -> @@ -781,28 +1332,47 @@ req(create_delegation_token, 2) -> {tagged_fields,tagged_fields}]}}, {max_lifetime_ms,int64}, {tagged_fields,tagged_fields}]; -req(renew_delegation_token, V) when V >= 0, V =< 1 -> +req(create_delegation_token, 3) -> + [{owner_principal_type,compact_nullable_string}, + {owner_principal_name,compact_nullable_string}, + {renewers,{compact_array,[{principal_type,compact_string}, + {principal_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {max_lifetime_ms,int64}, + {tagged_fields,tagged_fields}]; +req(renew_delegation_token, 1) -> [{hmac,bytes},{renew_period_ms,int64}]; -req(expire_delegation_token, V) when V >= 0, V =< 1 -> +req(renew_delegation_token, 2) -> + [{hmac,compact_bytes},{renew_period_ms,int64},{tagged_fields,tagged_fields}]; +req(expire_delegation_token, 1) -> [{hmac,bytes},{expiry_time_period_ms,int64}]; -req(describe_delegation_token, V) when V >= 0, V =< 1 -> +req(expire_delegation_token, 2) -> + [{hmac,compact_bytes}, + {expiry_time_period_ms,int64}, + {tagged_fields,tagged_fields}]; +req(describe_delegation_token, 1) -> [{owners,{array,[{principal_type,string},{principal_name,string}]}}]; +req(describe_delegation_token, V) when V >= 2, V =< 3 -> + [{owners,{compact_array,[{principal_type,compact_string}, + {principal_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(delete_groups, V) when V >= 0, V =< 1 -> [{groups_names,{array,string}}]; req(delete_groups, 2) -> [{groups_names,{compact_array,compact_string}}, {tagged_fields,tagged_fields}]; req(elect_leaders, 0) -> - [{topic_partitions,{array,[{topic,string},{partition_id,{array,int32}}]}}, + [{topic_partitions,{array,[{topic,string},{partitions,{array,int32}}]}}, {timeout_ms,int32}]; req(elect_leaders, 1) -> [{election_type,int8}, - {topic_partitions,{array,[{topic,string},{partition_id,{array,int32}}]}}, + {topic_partitions,{array,[{topic,string},{partitions,{array,int32}}]}}, {timeout_ms,int32}]; req(elect_leaders, 2) -> [{election_type,int8}, {topic_partitions,{compact_array,[{topic,compact_string}, - {partition_id,{compact_array,int32}}, + {partitions,{compact_array,int32}}, {tagged_fields,tagged_fields}]}}, {timeout_ms,int32}, {tagged_fields,tagged_fields}]; @@ -839,6 +1409,19 @@ req(alter_partition_reassignments, 0) -> {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; +req(alter_partition_reassignments, 1) -> + [{timeout_ms,int32}, + {allow_replication_factor_change,boolean}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {replicas,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; req(list_partition_reassignments, 0) -> [{timeout_ms,int32}, {topics,{compact_array,[{name,compact_string}, @@ -848,125 +1431,530 @@ req(list_partition_reassignments, 0) -> req(offset_delete, 0) -> [{group_id,string}, {topics,{array,[{name,string}, - {partitions,{array,[{partition_index,int32}]}}]}}]. - -rsp(produce, 0) -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, - {error_code,int16}, - {base_offset,int64}]}}]}}]; -rsp(produce, 1) -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, - {error_code,int16}, - {base_offset,int64}]}}]}}, - {throttle_time_ms,int32}]; -rsp(produce, V) when V >= 2, V =< 4 -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, - {error_code,int16}, - {base_offset,int64}, - {log_append_time,int64}]}}]}}, - {throttle_time_ms,int32}]; -rsp(produce, V) when V >= 5, V =< 7 -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, - {error_code,int16}, - {base_offset,int64}, - {log_append_time,int64}, - {log_start_offset,int64}]}}]}}, - {throttle_time_ms,int32}]; -rsp(produce, 8) -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, + {partitions,{array,[{partition_index,int32}]}}]}}]; +req(describe_client_quotas, 0) -> + [{components,{array,[{entity_type,string}, + {match_type,int8}, + {match,nullable_string}]}}, + {strict,boolean}]; +req(describe_client_quotas, 1) -> + [{components,{compact_array,[{entity_type,compact_string}, + {match_type,int8}, + {match,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {strict,boolean}, + {tagged_fields,tagged_fields}]; +req(alter_client_quotas, 0) -> + [{entries,{array,[{entity,{array,[{entity_type,string}, + {entity_name,nullable_string}]}}, + {ops,{array,[{key,string}, + {value,float64}, + {remove,boolean}]}}]}}, + {validate_only,boolean}]; +req(alter_client_quotas, 1) -> + [{entries, + {compact_array, + [{entity, + {compact_array, + [{entity_type,compact_string}, + {entity_name,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {ops, + {compact_array, + [{key,compact_string}, + {value,float64}, + {remove,boolean}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {validate_only,boolean}, + {tagged_fields,tagged_fields}]; +req(describe_user_scram_credentials, 0) -> + [{users,{compact_array,[{name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(alter_user_scram_credentials, 0) -> + [{deletions,{compact_array,[{name,compact_string}, + {mechanism,int8}, + {tagged_fields,tagged_fields}]}}, + {upsertions,{compact_array,[{name,compact_string}, + {mechanism,int8}, + {iterations,int32}, + {salt,compact_bytes}, + {salted_password,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(fetch_snapshot, V) when V >= 0, V =< 1 -> + [{replica_id,int32}, + {max_bytes,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, [{partition,int32}, - {error_code,int16}, - {base_offset,int64}, - {log_append_time,int64}, - {log_start_offset,int64}, - {record_errors, - {array, - [{batch_index,int32}, - {batch_index_error_message,nullable_string}]}}, - {error_message,nullable_string}]}}]}}, - {throttle_time_ms,int32}]; -rsp(fetch, 0) -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition_header, - [{partition,int32}, - {error_code,int16}, - {high_watermark,int64}]}, - {record_set,records}]}}]}}]; -rsp(fetch, V) when V >= 1, V =< 3 -> - [{throttle_time_ms,int32}, - {responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition_header, - [{partition,int32}, - {error_code,int16}, - {high_watermark,int64}]}, - {record_set,records}]}}]}}]; -rsp(fetch, 4) -> + {current_leader_epoch,int32}, + {snapshot_id, + [{end_offset,int64}, + {epoch,int32}, + {tagged_fields,tagged_fields}]}, + {position,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(describe_cluster, 0) -> + [{include_cluster_authorized_operations,boolean}, + {tagged_fields,tagged_fields}]; +req(describe_cluster, 1) -> + [{include_cluster_authorized_operations,boolean}, + {endpoint_type,int8}, + {tagged_fields,tagged_fields}]; +req(describe_cluster, 2) -> + [{include_cluster_authorized_operations,boolean}, + {endpoint_type,int8}, + {include_fenced_brokers,boolean}, + {tagged_fields,tagged_fields}]; +req(describe_producers, 0) -> + [{topics,{compact_array,[{name,compact_string}, + {partition_indexes,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(unregister_broker, 0) -> + [{broker_id,int32},{tagged_fields,tagged_fields}]; +req(describe_transactions, 0) -> + [{transactional_ids,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]; +req(list_transactions, 0) -> + [{state_filters,{compact_array,compact_string}}, + {producer_id_filters,{compact_array,int64}}, + {tagged_fields,tagged_fields}]; +req(list_transactions, 1) -> + [{state_filters,{compact_array,compact_string}}, + {producer_id_filters,{compact_array,int64}}, + {duration_filter,int64}, + {tagged_fields,tagged_fields}]; +req(list_transactions, 2) -> + [{state_filters,{compact_array,compact_string}}, + {producer_id_filters,{compact_array,int64}}, + {duration_filter,int64}, + {transactional_id_pattern,compact_nullable_string}, + {tagged_fields,tagged_fields}]; +req(consumer_group_heartbeat, 0) -> + [{group_id,compact_string}, + {member_id,compact_string}, + {member_epoch,int32}, + {instance_id,compact_nullable_string}, + {rack_id,compact_nullable_string}, + {rebalance_timeout_ms,int32}, + {subscribed_topic_names,{compact_array,compact_string}}, + {server_assignor,compact_nullable_string}, + {topic_partitions,{compact_array,[{topic_id,uuid}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(consumer_group_heartbeat, 1) -> + [{group_id,compact_string}, + {member_id,compact_string}, + {member_epoch,int32}, + {instance_id,compact_nullable_string}, + {rack_id,compact_nullable_string}, + {rebalance_timeout_ms,int32}, + {subscribed_topic_names,{compact_array,compact_string}}, + {subscribed_topic_regex,compact_nullable_string}, + {server_assignor,compact_nullable_string}, + {topic_partitions,{compact_array,[{topic_id,uuid}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(consumer_group_describe, V) when V >= 0, V =< 1 -> + [{group_ids,{compact_array,compact_string}}, + {include_authorized_operations,boolean}, + {tagged_fields,tagged_fields}]; +req(controller_registration, 0) -> + [{controller_id,int32}, + {incarnation_id,uuid}, + {zk_migration_ready,boolean}, + {listeners,{compact_array,[{name,compact_string}, + {host,compact_string}, + {port,uint16}, + {security_protocol,int16}, + {tagged_fields,tagged_fields}]}}, + {features,{compact_array,[{name,compact_string}, + {min_supported_version,int16}, + {max_supported_version,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(get_telemetry_subscriptions, 0) -> + [{client_instance_id,uuid},{tagged_fields,tagged_fields}]; +req(push_telemetry, 0) -> + [{client_instance_id,uuid}, + {subscription_id,int32}, + {terminating,boolean}, + {compression_type,int8}, + {metrics,compact_bytes}, + {tagged_fields,tagged_fields}]; +req(assign_replicas_to_dirs, 0) -> + [{broker_id,int32}, + {broker_epoch,int64}, + {directories, + {compact_array, + [{id,uuid}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(list_config_resources, 0) -> + [{tagged_fields,tagged_fields}]; +req(list_config_resources, 1) -> + [{resource_types,{compact_array,int8}},{tagged_fields,tagged_fields}]; +req(describe_topic_partitions, 0) -> + [{topics,{compact_array,[{name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {response_partition_limit,int32}, + {cursor,[{topic_name,compact_string}, + {partition_index,int32}, + {tagged_fields,tagged_fields}]}, + {tagged_fields,tagged_fields}]; +req(share_group_heartbeat, 1) -> + [{group_id,compact_string}, + {member_id,compact_string}, + {member_epoch,int32}, + {rack_id,compact_nullable_string}, + {subscribed_topic_names,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]; +req(share_group_describe, 1) -> + [{group_ids,{compact_array,compact_string}}, + {include_authorized_operations,boolean}, + {tagged_fields,tagged_fields}]; +req(share_fetch, 1) -> + [{group_id,compact_nullable_string}, + {member_id,compact_nullable_string}, + {share_session_epoch,int32}, + {max_wait_ms,int32}, + {min_bytes,int32}, + {max_bytes,int32}, + {max_records,int32}, + {batch_size,int32}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {acknowledgement_batches, + {compact_array, + [{first_offset,int64}, + {last_offset,int64}, + {acknowledge_types,{compact_array,int8}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {forgotten_topics_data, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {acknowledgement_batches, + {compact_array, + [{first_offset,int64}, + {last_offset,int64}, + {acknowledge_types,{compact_array,int8}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(share_acknowledge, 1) -> + [{group_id,compact_nullable_string}, + {member_id,compact_nullable_string}, + {share_session_epoch,int32}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {acknowledgement_batches, + {compact_array, + [{first_offset,int64}, + {last_offset,int64}, + {acknowledge_types,{compact_array,int8}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(add_raft_voter, 0) -> + [{cluster_id,compact_nullable_string}, + {timeout_ms,int32}, + {voter_id,int32}, + {voter_directory_id,uuid}, + {listeners,{compact_array,[{name,compact_string}, + {host,compact_string}, + {port,uint16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(remove_raft_voter, 0) -> + [{cluster_id,compact_nullable_string}, + {voter_id,int32}, + {voter_directory_id,uuid}, + {tagged_fields,tagged_fields}]; +req(update_raft_voter, 0) -> + [{cluster_id,compact_nullable_string}, + {current_leader_epoch,int32}, + {voter_id,int32}, + {voter_directory_id,uuid}, + {listeners,{compact_array,[{name,compact_string}, + {host,compact_string}, + {port,uint16}, + {tagged_fields,tagged_fields}]}}, + {kraft_version_feature,[{min_supported_version,int16}, + {max_supported_version,int16}, + {tagged_fields,tagged_fields}]}, + {tagged_fields,tagged_fields}]; +req(streams_group_heartbeat, 0) -> + [{group_id,compact_string}, + {member_id,compact_string}, + {member_epoch,int32}, + {endpoint_information_epoch,int32}, + {instance_id,compact_nullable_string}, + {rack_id,compact_nullable_string}, + {rebalance_timeout_ms,int32}, + {topology, + [{epoch,int32}, + {subtopologies, + {compact_array, + [{subtopology_id,compact_string}, + {source_topics,{compact_array,compact_string}}, + {source_topic_regex,{compact_array,compact_string}}, + {state_changelog_topics, + {compact_array, + [{name,compact_string}, + {partitions,int32}, + {replication_factor,int16}, + {topic_configs, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {repartition_sink_topics,{compact_array,compact_string}}, + {repartition_source_topics, + {compact_array, + [{name,compact_string}, + {partitions,int32}, + {replication_factor,int16}, + {topic_configs, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {copartition_groups, + {compact_array, + [{source_topics,{compact_array,compact_string}}, + {source_topic_regex,{compact_array,compact_string}}, + {repartition_source_topics, + {compact_array, + [{name,compact_string}, + {partitions,int32}, + {replication_factor,int16}, + {topic_configs, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {active_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {standby_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {warmup_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {process_id,compact_nullable_string}, + {user_endpoint, + [{host,compact_string},{port,uint16},{tagged_fields,tagged_fields}]}, + {client_tags, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {task_offsets, + {compact_array, + [{subtopology_id,compact_string}, + {partition,int32}, + {offset,int64}, + {tagged_fields,tagged_fields}]}}, + {task_end_offsets, + {compact_array, + [{subtopology_id,compact_string}, + {partition,int32}, + {offset,int64}, + {tagged_fields,tagged_fields}]}}, + {shutdown_application,boolean}, + {tagged_fields,tagged_fields}]; +req(streams_group_describe, 0) -> + [{group_ids,{compact_array,compact_string}}, + {include_authorized_operations,boolean}, + {tagged_fields,tagged_fields}]; +req(describe_share_group_offsets, 0) -> + [{groups, + {compact_array, + [{group_id,compact_string}, + {topics, + {compact_array, + [{topic_name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(alter_share_group_offsets, 0) -> + [{group_id,compact_string}, + {topics, + {compact_array, + [{topic_name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {start_offset,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +req(delete_share_group_offsets, 0) -> + [{group_id,compact_string}, + {topics,{compact_array,[{topic_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]. + +rsp(produce, V) when V >= 3, V =< 4 -> + [{responses, + {array, + [{name,string}, + {partition_responses, + {array, + [{index,int32}, + {error_code,int16}, + {base_offset,int64}, + {log_append_time_ms,int64}]}}]}}, + {throttle_time_ms,int32}]; +rsp(produce, V) when V >= 5, V =< 7 -> + [{responses, + {array, + [{name,string}, + {partition_responses, + {array, + [{index,int32}, + {error_code,int16}, + {base_offset,int64}, + {log_append_time_ms,int64}, + {log_start_offset,int64}]}}]}}, + {throttle_time_ms,int32}]; +rsp(produce, 8) -> + [{responses, + {array, + [{name,string}, + {partition_responses, + {array, + [{index,int32}, + {error_code,int16}, + {base_offset,int64}, + {log_append_time_ms,int64}, + {log_start_offset,int64}, + {record_errors, + {array, + [{batch_index,int32}, + {batch_index_error_message,nullable_string}]}}, + {error_message,nullable_string}]}}]}}, + {throttle_time_ms,int32}]; +rsp(produce, V) when V >= 9, V =< 12 -> + [{responses, + {compact_array, + [{name,compact_string}, + {partition_responses, + {compact_array, + [{index,int32}, + {error_code,int16}, + {base_offset,int64}, + {log_append_time_ms,int64}, + {log_start_offset,int64}, + {record_errors, + {compact_array, + [{batch_index,int32}, + {batch_index_error_message, + compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(produce, 13) -> + [{responses, + {compact_array, + [{topic_id,uuid}, + {partition_responses, + {compact_array, + [{index,int32}, + {error_code,int16}, + {base_offset,int64}, + {log_append_time_ms,int64}, + {log_start_offset,int64}, + {record_errors, + {compact_array, + [{batch_index,int32}, + {batch_index_error_message, + compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(fetch, 4) -> [{throttle_time_ms,int32}, {responses, {array, [{topic,string}, - {partition_responses, + {partitions, {array, - [{partition_header, - [{partition,int32}, - {error_code,int16}, - {high_watermark,int64}, - {last_stable_offset,int64}, - {aborted_transactions, - {array, - [{producer_id,int64}, - {first_offset,int64}]}}]}, - {record_set,records}]}}]}}]; + [{partition_index,int32}, + {error_code,int16}, + {high_watermark,int64}, + {last_stable_offset,int64}, + {aborted_transactions, + {array,[{producer_id,int64},{first_offset,int64}]}}, + {records,records}]}}]}}]; rsp(fetch, V) when V >= 5, V =< 6 -> [{throttle_time_ms,int32}, {responses, {array, [{topic,string}, - {partition_responses, + {partitions, {array, - [{partition_header, - [{partition,int32}, - {error_code,int16}, - {high_watermark,int64}, - {last_stable_offset,int64}, - {log_start_offset,int64}, - {aborted_transactions, - {array, - [{producer_id,int64}, - {first_offset,int64}]}}]}, - {record_set,records}]}}]}}]; + [{partition_index,int32}, + {error_code,int16}, + {high_watermark,int64}, + {last_stable_offset,int64}, + {log_start_offset,int64}, + {aborted_transactions, + {array,[{producer_id,int64},{first_offset,int64}]}}, + {records,records}]}}]}}]; rsp(fetch, V) when V >= 7, V =< 10 -> [{throttle_time_ms,int32}, {error_code,int16}, @@ -974,19 +1962,16 @@ rsp(fetch, V) when V >= 7, V =< 10 -> {responses, {array, [{topic,string}, - {partition_responses, + {partitions, {array, - [{partition_header, - [{partition,int32}, - {error_code,int16}, - {high_watermark,int64}, - {last_stable_offset,int64}, - {log_start_offset,int64}, - {aborted_transactions, - {array, - [{producer_id,int64}, - {first_offset,int64}]}}]}, - {record_set,records}]}}]}}]; + [{partition_index,int32}, + {error_code,int16}, + {high_watermark,int64}, + {last_stable_offset,int64}, + {log_start_offset,int64}, + {aborted_transactions, + {array,[{producer_id,int64},{first_offset,int64}]}}, + {records,records}]}}]}}]; rsp(fetch, 11) -> [{throttle_time_ms,int32}, {error_code,int16}, @@ -994,80 +1979,120 @@ rsp(fetch, 11) -> {responses, {array, [{topic,string}, - {partition_responses, - {array, - [{partition_header, - [{partition,int32}, - {error_code,int16}, - {high_watermark,int64}, - {last_stable_offset,int64}, - {log_start_offset,int64}, - {aborted_transactions, - {array, - [{producer_id,int64},{first_offset,int64}]}}, - {preferred_read_replica,int32}]}, - {record_set,records}]}}]}}]; -rsp(list_offsets, 0) -> - [{responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, - {error_code,int16}, - {offsets,{array,int64}}]}}]}}]; -rsp(list_offsets, 1) -> - [{responses, - {array, - [{topic,string}, - {partition_responses, + {partitions, {array, - [{partition,int32}, + [{partition_index,int32}, {error_code,int16}, - {timestamp,int64}, - {offset,int64}]}}]}}]; -rsp(list_offsets, V) when V >= 2, V =< 3 -> + {high_watermark,int64}, + {last_stable_offset,int64}, + {log_start_offset,int64}, + {aborted_transactions, + {array,[{producer_id,int64},{first_offset,int64}]}}, + {preferred_read_replica,int32}, + {records,records}]}}]}}]; +rsp(fetch, 12) -> [{throttle_time_ms,int32}, + {error_code,int16}, + {session_id,int32}, {responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, + {compact_array, + [{topic,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, {error_code,int16}, - {timestamp,int64}, - {offset,int64}]}}]}}]; -rsp(list_offsets, V) when V >= 4, V =< 5 -> + {high_watermark,int64}, + {last_stable_offset,int64}, + {log_start_offset,int64}, + {aborted_transactions, + {compact_array, + [{producer_id,int64}, + {first_offset,int64}, + {tagged_fields,tagged_fields}]}}, + {preferred_read_replica,int32}, + {records,compact_records}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(fetch, V) when V >= 13, V =< 18 -> [{throttle_time_ms,int32}, + {error_code,int16}, + {session_id,int32}, {responses, - {array, - [{topic,string}, - {partition_responses, - {array, - [{partition,int32}, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, {error_code,int16}, - {timestamp,int64}, - {offset,int64}, - {leader_epoch,int32}]}}]}}]; -rsp(metadata, 0) -> - [{brokers,{array,[{node_id,int32},{host,string},{port,int32}]}}, - {topics,{array,[{error_code,int16}, - {name,string}, - {partitions,{array,[{error_code,int16}, - {partition_index,int32}, - {leader_id,int32}, - {replica_nodes,{array,int32}}, - {isr_nodes,{array,int32}}]}}]}}]; -rsp(metadata, 1) -> - [{brokers,{array,[{node_id,int32}, - {host,string}, - {port,int32}, - {rack,nullable_string}]}}, - {controller_id,int32}, - {topics,{array,[{error_code,int16}, - {name,string}, - {is_internal,boolean}, - {partitions,{array,[{error_code,int16}, + {high_watermark,int64}, + {last_stable_offset,int64}, + {log_start_offset,int64}, + {aborted_transactions, + {compact_array, + [{producer_id,int64}, + {first_offset,int64}, + {tagged_fields,tagged_fields}]}}, + {preferred_read_replica,int32}, + {records,compact_records}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_offsets, 1) -> + [{topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {error_code,int16}, + {timestamp,int64}, + {offset,int64}]}}]}}]; +rsp(list_offsets, V) when V >= 2, V =< 3 -> + [{throttle_time_ms,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {error_code,int16}, + {timestamp,int64}, + {offset,int64}]}}]}}]; +rsp(list_offsets, V) when V >= 4, V =< 5 -> + [{throttle_time_ms,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {error_code,int16}, + {timestamp,int64}, + {offset,int64}, + {leader_epoch,int32}]}}]}}]; +rsp(list_offsets, V) when V >= 6, V =< 10 -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {timestamp,int64}, + {offset,int64}, + {leader_epoch,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(metadata, 0) -> + [{brokers,{array,[{node_id,int32},{host,string},{port,int32}]}}, + {topics,{array,[{error_code,int16}, + {name,string}, + {partitions,{array,[{error_code,int16}, + {partition_index,int32}, + {leader_id,int32}, + {replica_nodes,{array,int32}}, + {isr_nodes,{array,int32}}]}}]}}]; +rsp(metadata, 1) -> + [{brokers,{array,[{node_id,int32}, + {host,string}, + {port,int32}, + {rack,nullable_string}]}}, + {controller_id,int32}, + {topics,{array,[{error_code,int16}, + {name,string}, + {is_internal,boolean}, + {partitions,{array,[{error_code,int16}, {partition_index,int32}, {leader_id,int32}, {replica_nodes,{array,int32}}, @@ -1188,7 +2213,129 @@ rsp(metadata, 9) -> {tagged_fields,tagged_fields}]}}, {cluster_authorized_operations,int32}, {tagged_fields,tagged_fields}]; -rsp(offset_commit, V) when V >= 0, V =< 2 -> +rsp(metadata, 10) -> + [{throttle_time_ms,int32}, + {brokers, + {compact_array, + [{node_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {cluster_id,compact_nullable_string}, + {controller_id,int32}, + {topics, + {compact_array, + [{error_code,int16}, + {name,compact_string}, + {topic_id,uuid}, + {is_internal,boolean}, + {partitions, + {compact_array, + [{error_code,int16}, + {partition_index,int32}, + {leader_id,int32}, + {leader_epoch,int32}, + {replica_nodes,{compact_array,int32}}, + {isr_nodes,{compact_array,int32}}, + {offline_replicas,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {topic_authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {cluster_authorized_operations,int32}, + {tagged_fields,tagged_fields}]; +rsp(metadata, 11) -> + [{throttle_time_ms,int32}, + {brokers, + {compact_array, + [{node_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {cluster_id,compact_nullable_string}, + {controller_id,int32}, + {topics, + {compact_array, + [{error_code,int16}, + {name,compact_string}, + {topic_id,uuid}, + {is_internal,boolean}, + {partitions, + {compact_array, + [{error_code,int16}, + {partition_index,int32}, + {leader_id,int32}, + {leader_epoch,int32}, + {replica_nodes,{compact_array,int32}}, + {isr_nodes,{compact_array,int32}}, + {offline_replicas,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {topic_authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(metadata, 12) -> + [{throttle_time_ms,int32}, + {brokers, + {compact_array, + [{node_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {cluster_id,compact_nullable_string}, + {controller_id,int32}, + {topics, + {compact_array, + [{error_code,int16}, + {name,compact_nullable_string}, + {topic_id,uuid}, + {is_internal,boolean}, + {partitions, + {compact_array, + [{error_code,int16}, + {partition_index,int32}, + {leader_id,int32}, + {leader_epoch,int32}, + {replica_nodes,{compact_array,int32}}, + {isr_nodes,{compact_array,int32}}, + {offline_replicas,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {topic_authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(metadata, 13) -> + [{throttle_time_ms,int32}, + {brokers, + {compact_array, + [{node_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {cluster_id,compact_nullable_string}, + {controller_id,int32}, + {topics, + {compact_array, + [{error_code,int16}, + {name,compact_nullable_string}, + {topic_id,uuid}, + {is_internal,boolean}, + {partitions, + {compact_array, + [{error_code,int16}, + {partition_index,int32}, + {leader_id,int32}, + {leader_epoch,int32}, + {replica_nodes,{compact_array,int32}}, + {isr_nodes,{compact_array,int32}}, + {offline_replicas,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {topic_authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {error_code,int16}, + {tagged_fields,tagged_fields}]; +rsp(offset_commit, 2) -> [{topics,{array,[{name,string}, {partitions,{array,[{partition_index,int32}, {error_code,int16}]}}]}}]; @@ -1197,7 +2344,7 @@ rsp(offset_commit, V) when V >= 3, V =< 7 -> {topics,{array,[{name,string}, {partitions,{array,[{partition_index,int32}, {error_code,int16}]}}]}}]; -rsp(offset_commit, 8) -> +rsp(offset_commit, V) when V >= 8, V =< 9 -> [{throttle_time_ms,int32}, {topics, {compact_array, @@ -1209,7 +2356,19 @@ rsp(offset_commit, 8) -> {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(offset_fetch, V) when V >= 0, V =< 1 -> +rsp(offset_commit, 10) -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(offset_fetch, 1) -> [{topics,{array,[{name,string}, {partitions,{array,[{partition_index,int32}, {committed_offset,int64}, @@ -1239,7 +2398,7 @@ rsp(offset_fetch, 5) -> {metadata,nullable_string}, {error_code,int16}]}}]}}, {error_code,int16}]; -rsp(offset_fetch, 6) -> +rsp(offset_fetch, V) when V >= 6, V =< 7 -> [{throttle_time_ms,int32}, {topics, {compact_array, @@ -1255,6 +2414,46 @@ rsp(offset_fetch, 6) -> {tagged_fields,tagged_fields}]}}, {error_code,int16}, {tagged_fields,tagged_fields}]; +rsp(offset_fetch, V) when V >= 8, V =< 9 -> + [{throttle_time_ms,int32}, + {groups, + {compact_array, + [{group_id,compact_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {committed_offset,int64}, + {committed_leader_epoch,int32}, + {metadata,compact_nullable_string}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(offset_fetch, 10) -> + [{throttle_time_ms,int32}, + {groups, + {compact_array, + [{group_id,compact_string}, + {topics, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {committed_offset,int64}, + {committed_leader_epoch,int32}, + {metadata,compact_nullable_string}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; rsp(find_coordinator, 0) -> [{error_code,int16},{node_id,int32},{host,string},{port,int32}]; rsp(find_coordinator, V) when V >= 1, V =< 2 -> @@ -1272,6 +2471,16 @@ rsp(find_coordinator, 3) -> {host,compact_string}, {port,int32}, {tagged_fields,tagged_fields}]; +rsp(find_coordinator, V) when V >= 4, V =< 6 -> + [{throttle_time_ms,int32}, + {coordinators,{compact_array,[{key,compact_string}, + {node_id,int32}, + {host,compact_string}, + {port,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; rsp(join_group, V) when V >= 0, V =< 1 -> [{error_code,int16}, {generation_id,int32}, @@ -1309,6 +2518,33 @@ rsp(join_group, 6) -> {metadata,compact_bytes}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; +rsp(join_group, V) when V >= 7, V =< 8 -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {generation_id,int32}, + {protocol_type,compact_nullable_string}, + {protocol_name,compact_nullable_string}, + {leader,compact_string}, + {member_id,compact_string}, + {members,{compact_array,[{member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {metadata,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(join_group, 9) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {generation_id,int32}, + {protocol_type,compact_nullable_string}, + {protocol_name,compact_nullable_string}, + {leader,compact_string}, + {skip_assignment,boolean}, + {member_id,compact_string}, + {members,{compact_array,[{member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {metadata,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; rsp(heartbeat, 0) -> [{error_code,int16}]; rsp(heartbeat, V) when V >= 1, V =< 3 -> @@ -1325,7 +2561,7 @@ rsp(leave_group, 3) -> {members,{array,[{member_id,string}, {group_instance_id,nullable_string}, {error_code,int16}]}}]; -rsp(leave_group, 4) -> +rsp(leave_group, V) when V >= 4, V =< 5 -> [{throttle_time_ms,int32}, {error_code,int16}, {members,{compact_array,[{member_id,compact_string}, @@ -1342,6 +2578,13 @@ rsp(sync_group, 4) -> {error_code,int16}, {assignment,compact_bytes}, {tagged_fields,tagged_fields}]; +rsp(sync_group, 5) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {protocol_type,compact_nullable_string}, + {protocol_name,compact_nullable_string}, + {assignment,compact_bytes}, + {tagged_fields,tagged_fields}]; rsp(describe_groups, 0) -> [{groups,{array,[{error_code,int16}, {group_id,string}, @@ -1396,413 +2639,1462 @@ rsp(describe_groups, 5) -> [{throttle_time_ms,int32}, {groups, {compact_array, - [{error_code,int16}, - {group_id,compact_string}, - {group_state,compact_string}, - {protocol_type,compact_string}, - {protocol_data,compact_string}, - {members, + [{error_code,int16}, + {group_id,compact_string}, + {group_state,compact_string}, + {protocol_type,compact_string}, + {protocol_data,compact_string}, + {members, + {compact_array, + [{member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {client_id,compact_string}, + {client_host,compact_string}, + {member_metadata,compact_bytes}, + {member_assignment,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_groups, 6) -> + [{throttle_time_ms,int32}, + {groups, + {compact_array, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {group_id,compact_string}, + {group_state,compact_string}, + {protocol_type,compact_string}, + {protocol_data,compact_string}, + {members, + {compact_array, + [{member_id,compact_string}, + {group_instance_id,compact_nullable_string}, + {client_id,compact_string}, + {client_host,compact_string}, + {member_metadata,compact_bytes}, + {member_assignment,compact_bytes}, + {tagged_fields,tagged_fields}]}}, + {authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_groups, 0) -> + [{error_code,int16}, + {groups,{array,[{group_id,string},{protocol_type,string}]}}]; +rsp(list_groups, V) when V >= 1, V =< 2 -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {groups,{array,[{group_id,string},{protocol_type,string}]}}]; +rsp(list_groups, 3) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {groups,{compact_array,[{group_id,compact_string}, + {protocol_type,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_groups, 4) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {groups,{compact_array,[{group_id,compact_string}, + {protocol_type,compact_string}, + {group_state,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_groups, 5) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {groups,{compact_array,[{group_id,compact_string}, + {protocol_type,compact_string}, + {group_state,compact_string}, + {group_type,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(sasl_handshake, V) when V >= 0, V =< 1 -> + [{error_code,int16},{mechanisms,{array,string}}]; +rsp(api_versions, 0) -> + [{error_code,int16}, + {api_keys,{array,[{api_key,int16}, + {min_version,int16}, + {max_version,int16}]}}]; +rsp(api_versions, V) when V >= 1, V =< 2 -> + [{error_code,int16}, + {api_keys,{array,[{api_key,int16}, + {min_version,int16}, + {max_version,int16}]}}, + {throttle_time_ms,int32}]; +rsp(api_versions, V) when V >= 3, V =< 4 -> + [{error_code,int16}, + {api_keys,{compact_array,[{api_key,int16}, + {min_version,int16}, + {max_version,int16}, + {tagged_fields,tagged_fields}]}}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(create_topics, V) when V >= 2, V =< 4 -> + [{throttle_time_ms,int32}, + {topics,{array,[{name,string}, + {error_code,int16}, + {error_message,nullable_string}]}}]; +rsp(create_topics, V) when V >= 5, V =< 6 -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {num_partitions,int32}, + {replication_factor,int16}, + {configs, + {compact_array, + [{name,compact_string}, + {value,compact_nullable_string}, + {read_only,boolean}, + {config_source,int8}, + {is_sensitive,boolean}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(create_topics, 7) -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {topic_id,uuid}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {num_partitions,int32}, + {replication_factor,int16}, + {configs, + {compact_array, + [{name,compact_string}, + {value,compact_nullable_string}, + {read_only,boolean}, + {config_source,int8}, + {is_sensitive,boolean}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(delete_topics, V) when V >= 1, V =< 3 -> + [{throttle_time_ms,int32}, + {responses,{array,[{name,string},{error_code,int16}]}}]; +rsp(delete_topics, 4) -> + [{throttle_time_ms,int32}, + {responses,{compact_array,[{name,compact_string}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(delete_topics, 5) -> + [{throttle_time_ms,int32}, + {responses,{compact_array,[{name,compact_string}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(delete_topics, 6) -> + [{throttle_time_ms,int32}, + {responses,{compact_array,[{name,compact_nullable_string}, + {topic_id,uuid}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(delete_records, V) when V >= 0, V =< 1 -> + [{throttle_time_ms,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {low_watermark,int64}, + {error_code,int16}]}}]}}]; +rsp(delete_records, 2) -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {low_watermark,int64}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(init_producer_id, V) when V >= 0, V =< 1 -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {producer_id,int64}, + {producer_epoch,int16}]; +rsp(init_producer_id, V) when V >= 2, V =< 5 -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {producer_id,int64}, + {producer_epoch,int16}, + {tagged_fields,tagged_fields}]; +rsp(init_producer_id, 6) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {producer_id,int64}, + {producer_epoch,int16}, + {ongoing_txn_producer_id,int64}, + {ongoing_txn_producer_epoch,int16}, + {tagged_fields,tagged_fields}]; +rsp(offset_for_leader_epoch, V) when V >= 2, V =< 3 -> + [{throttle_time_ms,int32}, + {topics,{array,[{topic,string}, + {partitions,{array,[{error_code,int16}, + {partition,int32}, + {leader_epoch,int32}, + {end_offset,int64}]}}]}}]; +rsp(offset_for_leader_epoch, 4) -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{topic,compact_string}, + {partitions, + {compact_array, + [{error_code,int16}, + {partition,int32}, + {leader_epoch,int32}, + {end_offset,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(add_partitions_to_txn, V) when V >= 0, V =< 2 -> + [{throttle_time_ms,int32}, + {results_by_topic_v3_and_below, + {array, + [{name,string}, + {results_by_partition, + {array, + [{partition_index,int32}, + {partition_error_code,int16}]}}]}}]; +rsp(add_partitions_to_txn, 3) -> + [{throttle_time_ms,int32}, + {results_by_topic_v3_and_below, + {compact_array, + [{name,compact_string}, + {results_by_partition, + {compact_array, + [{partition_index,int32}, + {partition_error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(add_partitions_to_txn, V) when V >= 4, V =< 5 -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {results_by_transaction, + {compact_array, + [{transactional_id,compact_string}, + {topic_results, + {compact_array, + [{name,compact_string}, + {results_by_partition, + {compact_array, + [{partition_index,int32}, + {partition_error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(add_offsets_to_txn, V) when V >= 0, V =< 2 -> + [{throttle_time_ms,int32},{error_code,int16}]; +rsp(add_offsets_to_txn, V) when V >= 3, V =< 4 -> + [{throttle_time_ms,int32},{error_code,int16},{tagged_fields,tagged_fields}]; +rsp(end_txn, V) when V >= 0, V =< 2 -> + [{throttle_time_ms,int32},{error_code,int16}]; +rsp(end_txn, V) when V >= 3, V =< 4 -> + [{throttle_time_ms,int32},{error_code,int16},{tagged_fields,tagged_fields}]; +rsp(end_txn, 5) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {producer_id,int64}, + {producer_epoch,int16}, + {tagged_fields,tagged_fields}]; +rsp(txn_offset_commit, V) when V >= 0, V =< 2 -> + [{throttle_time_ms,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {error_code,int16}]}}]}}]; +rsp(txn_offset_commit, V) when V >= 3, V =< 5 -> + [{throttle_time_ms,int32}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_acls, 1) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,nullable_string}, + {resources,{array,[{resource_type,int8}, + {resource_name,string}, + {pattern_type,int8}, + {acls,{array,[{principal,string}, + {host,string}, + {operation,int8}, + {permission_type,int8}]}}]}}]; +rsp(describe_acls, V) when V >= 2, V =< 3 -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {resources, + {compact_array, + [{resource_type,int8}, + {resource_name,compact_string}, + {pattern_type,int8}, + {acls, + {compact_array, + [{principal,compact_string}, + {host,compact_string}, + {operation,int8}, + {permission_type,int8}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(create_acls, 1) -> + [{throttle_time_ms,int32}, + {results,{array,[{error_code,int16},{error_message,nullable_string}]}}]; +rsp(create_acls, V) when V >= 2, V =< 3 -> + [{throttle_time_ms,int32}, + {results,{compact_array,[{error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(delete_acls, 1) -> + [{throttle_time_ms,int32}, + {filter_results, + {array, + [{error_code,int16}, + {error_message,nullable_string}, + {matching_acls, + {array, + [{error_code,int16}, + {error_message,nullable_string}, + {resource_type,int8}, + {resource_name,string}, + {pattern_type,int8}, + {principal,string}, + {host,string}, + {operation,int8}, + {permission_type,int8}]}}]}}]; +rsp(delete_acls, V) when V >= 2, V =< 3 -> + [{throttle_time_ms,int32}, + {filter_results, + {compact_array, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {matching_acls, + {compact_array, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {resource_type,int8}, + {resource_name,compact_string}, + {pattern_type,int8}, + {principal,compact_string}, + {host,compact_string}, + {operation,int8}, + {permission_type,int8}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_configs, V) when V >= 1, V =< 2 -> + [{throttle_time_ms,int32}, + {results, + {array, + [{error_code,int16}, + {error_message,nullable_string}, + {resource_type,int8}, + {resource_name,string}, + {configs, + {array, + [{name,string}, + {value,nullable_string}, + {read_only,boolean}, + {config_source,int8}, + {is_sensitive,boolean}, + {synonyms, + {array, + [{name,string}, + {value,nullable_string}, + {source,int8}]}}]}}]}}]; +rsp(describe_configs, 3) -> + [{throttle_time_ms,int32}, + {results, + {array, + [{error_code,int16}, + {error_message,nullable_string}, + {resource_type,int8}, + {resource_name,string}, + {configs, + {array, + [{name,string}, + {value,nullable_string}, + {read_only,boolean}, + {config_source,int8}, + {is_sensitive,boolean}, + {synonyms, + {array, + [{name,string}, + {value,nullable_string}, + {source,int8}]}}, + {config_type,int8}, + {documentation,nullable_string}]}}]}}]; +rsp(describe_configs, 4) -> + [{throttle_time_ms,int32}, + {results, + {compact_array, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {resource_type,int8}, + {resource_name,compact_string}, + {configs, + {compact_array, + [{name,compact_string}, + {value,compact_nullable_string}, + {read_only,boolean}, + {config_source,int8}, + {is_sensitive,boolean}, + {synonyms, + {compact_array, + [{name,compact_string}, + {value,compact_nullable_string}, + {source,int8}, + {tagged_fields,tagged_fields}]}}, + {config_type,int8}, + {documentation,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(alter_configs, V) when V >= 0, V =< 1 -> + [{throttle_time_ms,int32}, + {responses,{array,[{error_code,int16}, + {error_message,nullable_string}, + {resource_type,int8}, + {resource_name,string}]}}]; +rsp(alter_configs, 2) -> + [{throttle_time_ms,int32}, + {responses,{compact_array,[{error_code,int16}, + {error_message,compact_nullable_string}, + {resource_type,int8}, + {resource_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(alter_replica_log_dirs, 1) -> + [{throttle_time_ms,int32}, + {results, + {array, + [{topic_name,string}, + {partitions, + {array,[{partition_index,int32},{error_code,int16}]}}]}}]; +rsp(alter_replica_log_dirs, 2) -> + [{throttle_time_ms,int32}, + {results, + {compact_array, + [{topic_name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_log_dirs, 1) -> + [{throttle_time_ms,int32}, + {results, + {array, + [{error_code,int16}, + {log_dir,string}, + {topics, + {array, + [{name,string}, + {partitions, + {array, + [{partition_index,int32}, + {partition_size,int64}, + {offset_lag,int64}, + {is_future_key,boolean}]}}]}}]}}]; +rsp(describe_log_dirs, 2) -> + [{throttle_time_ms,int32}, + {results, + {compact_array, + [{error_code,int16}, + {log_dir,compact_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {partition_size,int64}, + {offset_lag,int64}, + {is_future_key,boolean}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_log_dirs, 3) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {results, + {compact_array, + [{error_code,int16}, + {log_dir,compact_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {partition_size,int64}, + {offset_lag,int64}, + {is_future_key,boolean}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_log_dirs, 4) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {results, + {compact_array, + [{error_code,int16}, + {log_dir,compact_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {partition_size,int64}, + {offset_lag,int64}, + {is_future_key,boolean}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {total_bytes,int64}, + {usable_bytes,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(sasl_authenticate, 0) -> + [{error_code,int16},{error_message,nullable_string},{auth_bytes,bytes}]; +rsp(sasl_authenticate, 1) -> + [{error_code,int16}, + {error_message,nullable_string}, + {auth_bytes,bytes}, + {session_lifetime_ms,int64}]; +rsp(sasl_authenticate, 2) -> + [{error_code,int16}, + {error_message,compact_nullable_string}, + {auth_bytes,compact_bytes}, + {session_lifetime_ms,int64}, + {tagged_fields,tagged_fields}]; +rsp(create_partitions, V) when V >= 0, V =< 1 -> + [{throttle_time_ms,int32}, + {results,{array,[{name,string}, + {error_code,int16}, + {error_message,nullable_string}]}}]; +rsp(create_partitions, V) when V >= 2, V =< 3 -> + [{throttle_time_ms,int32}, + {results,{compact_array,[{name,compact_string}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(create_delegation_token, 1) -> + [{error_code,int16}, + {principal_type,string}, + {principal_name,string}, + {issue_timestamp_ms,int64}, + {expiry_timestamp_ms,int64}, + {max_timestamp_ms,int64}, + {token_id,string}, + {hmac,bytes}, + {throttle_time_ms,int32}]; +rsp(create_delegation_token, 2) -> + [{error_code,int16}, + {principal_type,compact_string}, + {principal_name,compact_string}, + {issue_timestamp_ms,int64}, + {expiry_timestamp_ms,int64}, + {max_timestamp_ms,int64}, + {token_id,compact_string}, + {hmac,compact_bytes}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(create_delegation_token, 3) -> + [{error_code,int16}, + {principal_type,compact_string}, + {principal_name,compact_string}, + {token_requester_principal_type,compact_string}, + {token_requester_principal_name,compact_string}, + {issue_timestamp_ms,int64}, + {expiry_timestamp_ms,int64}, + {max_timestamp_ms,int64}, + {token_id,compact_string}, + {hmac,compact_bytes}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(renew_delegation_token, 1) -> + [{error_code,int16},{expiry_timestamp_ms,int64},{throttle_time_ms,int32}]; +rsp(renew_delegation_token, 2) -> + [{error_code,int16}, + {expiry_timestamp_ms,int64}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(expire_delegation_token, 1) -> + [{error_code,int16},{expiry_timestamp_ms,int64},{throttle_time_ms,int32}]; +rsp(expire_delegation_token, 2) -> + [{error_code,int16}, + {expiry_timestamp_ms,int64}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(describe_delegation_token, 1) -> + [{error_code,int16}, + {tokens,{array,[{principal_type,string}, + {principal_name,string}, + {issue_timestamp,int64}, + {expiry_timestamp,int64}, + {max_timestamp,int64}, + {token_id,string}, + {hmac,bytes}, + {renewers,{array,[{principal_type,string}, + {principal_name,string}]}}]}}, + {throttle_time_ms,int32}]; +rsp(describe_delegation_token, 2) -> + [{error_code,int16}, + {tokens, + {compact_array, + [{principal_type,compact_string}, + {principal_name,compact_string}, + {issue_timestamp,int64}, + {expiry_timestamp,int64}, + {max_timestamp,int64}, + {token_id,compact_string}, + {hmac,compact_bytes}, + {renewers, + {compact_array, + [{principal_type,compact_string}, + {principal_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(describe_delegation_token, 3) -> + [{error_code,int16}, + {tokens, + {compact_array, + [{principal_type,compact_string}, + {principal_name,compact_string}, + {token_requester_principal_type,compact_string}, + {token_requester_principal_name,compact_string}, + {issue_timestamp,int64}, + {expiry_timestamp,int64}, + {max_timestamp,int64}, + {token_id,compact_string}, + {hmac,compact_bytes}, + {renewers, + {compact_array, + [{principal_type,compact_string}, + {principal_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {throttle_time_ms,int32}, + {tagged_fields,tagged_fields}]; +rsp(delete_groups, V) when V >= 0, V =< 1 -> + [{throttle_time_ms,int32}, + {results,{array,[{group_id,string},{error_code,int16}]}}]; +rsp(delete_groups, 2) -> + [{throttle_time_ms,int32}, + {results,{compact_array,[{group_id,compact_string}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(elect_leaders, 0) -> + [{throttle_time_ms,int32}, + {replica_election_results, + {array, + [{topic,string}, + {partition_result, + {array, + [{partition_id,int32}, + {error_code,int16}, + {error_message,nullable_string}]}}]}}]; +rsp(elect_leaders, 1) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {replica_election_results, + {array, + [{topic,string}, + {partition_result, + {array, + [{partition_id,int32}, + {error_code,int16}, + {error_message,nullable_string}]}}]}}]; +rsp(elect_leaders, 2) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {replica_election_results, + {compact_array, + [{topic,compact_string}, + {partition_result, + {compact_array, + [{partition_id,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(incremental_alter_configs, 0) -> + [{throttle_time_ms,int32}, + {responses,{array,[{error_code,int16}, + {error_message,nullable_string}, + {resource_type,int8}, + {resource_name,string}]}}]; +rsp(incremental_alter_configs, 1) -> + [{throttle_time_ms,int32}, + {responses,{compact_array,[{error_code,int16}, + {error_message,compact_nullable_string}, + {resource_type,int8}, + {resource_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(alter_partition_reassignments, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {responses, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(alter_partition_reassignments, 1) -> + [{throttle_time_ms,int32}, + {allow_replication_factor_change,boolean}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {responses, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_partition_reassignments, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {topics, + {compact_array, + [{name,compact_string}, + {partitions, {compact_array, - [{member_id,compact_string}, - {group_instance_id,compact_nullable_string}, - {client_id,compact_string}, - {client_host,compact_string}, - {member_metadata,compact_bytes}, - {member_assignment,compact_bytes}, + [{partition_index,int32}, + {replicas,{compact_array,int32}}, + {adding_replicas,{compact_array,int32}}, + {removing_replicas,{compact_array,int32}}, {tagged_fields,tagged_fields}]}}, - {authorized_operations,int32}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(list_groups, 0) -> +rsp(offset_delete, 0) -> [{error_code,int16}, - {groups,{array,[{group_id,string},{protocol_type,string}]}}]; -rsp(list_groups, V) when V >= 1, V =< 2 -> + {throttle_time_ms,int32}, + {topics,{array,[{name,string}, + {partitions,{array,[{partition_index,int32}, + {error_code,int16}]}}]}}]; +rsp(describe_client_quotas, 0) -> [{throttle_time_ms,int32}, {error_code,int16}, - {groups,{array,[{group_id,string},{protocol_type,string}]}}]; -rsp(list_groups, 3) -> + {error_message,nullable_string}, + {entries,{array,[{entity,{array,[{entity_type,string}, + {entity_name,nullable_string}]}}, + {values,{array,[{key,string},{value,float64}]}}]}}]; +rsp(describe_client_quotas, 1) -> [{throttle_time_ms,int32}, {error_code,int16}, - {groups,{compact_array,[{group_id,compact_string}, - {protocol_type,compact_string}, - {tagged_fields,tagged_fields}]}}, - {tagged_fields,tagged_fields}]; -rsp(sasl_handshake, V) when V >= 0, V =< 1 -> - [{error_code,int16},{mechanisms,{array,string}}]; -rsp(api_versions, 0) -> - [{error_code,int16}, - {api_keys,{array,[{api_key,int16}, - {min_version,int16}, - {max_version,int16}]}}]; -rsp(api_versions, V) when V >= 1, V =< 2 -> - [{error_code,int16}, - {api_keys,{array,[{api_key,int16}, - {min_version,int16}, - {max_version,int16}]}}, - {throttle_time_ms,int32}]; -rsp(api_versions, 3) -> - [{error_code,int16}, - {api_keys,{compact_array,[{api_key,int16}, - {min_version,int16}, - {max_version,int16}, - {tagged_fields,tagged_fields}]}}, - {throttle_time_ms,int32}, + {error_message,compact_nullable_string}, + {entries, + {compact_array, + [{entity, + {compact_array, + [{entity_type,compact_string}, + {entity_name,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {values, + {compact_array, + [{key,compact_string}, + {value,float64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(create_topics, 0) -> - [{topics,{array,[{name,string},{error_code,int16}]}}]; -rsp(create_topics, 1) -> - [{topics,{array,[{name,string}, - {error_code,int16}, - {error_message,nullable_string}]}}]; -rsp(create_topics, V) when V >= 2, V =< 4 -> +rsp(alter_client_quotas, 0) -> [{throttle_time_ms,int32}, - {topics,{array,[{name,string}, - {error_code,int16}, - {error_message,nullable_string}]}}]; -rsp(create_topics, 5) -> + {entries,{array,[{error_code,int16}, + {error_message,nullable_string}, + {entity,{array,[{entity_type,string}, + {entity_name,nullable_string}]}}]}}]; +rsp(alter_client_quotas, 1) -> [{throttle_time_ms,int32}, - {topics, + {entries, {compact_array, - [{name,compact_string}, - {error_code,int16}, + [{error_code,int16}, {error_message,compact_nullable_string}, - {num_partitions,int32}, - {replication_factor,int16}, - {configs, + {entity, {compact_array, - [{name,compact_string}, - {value,compact_nullable_string}, - {read_only,boolean}, - {config_source,int8}, - {is_sensitive,boolean}, + [{entity_type,compact_string}, + {entity_name,compact_nullable_string}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(delete_topics, 0) -> - [{responses,{array,[{name,string},{error_code,int16}]}}]; -rsp(delete_topics, V) when V >= 1, V =< 3 -> +rsp(describe_user_scram_credentials, 0) -> [{throttle_time_ms,int32}, - {responses,{array,[{name,string},{error_code,int16}]}}]; -rsp(delete_topics, 4) -> - [{throttle_time_ms,int32}, - {responses,{compact_array,[{name,compact_string}, - {error_code,int16}, - {tagged_fields,tagged_fields}]}}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {results, + {compact_array, + [{user,compact_string}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {credential_infos, + {compact_array, + [{mechanism,int8}, + {iterations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(delete_records, V) when V >= 0, V =< 1 -> +rsp(alter_user_scram_credentials, 0) -> [{throttle_time_ms,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, - {low_watermark,int64}, - {error_code,int16}]}}]}}]; -rsp(init_producer_id, V) when V >= 0, V =< 1 -> + {results,{compact_array,[{user,compact_string}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(fetch_snapshot, V) when V >= 0, V =< 1 -> [{throttle_time_ms,int32}, {error_code,int16}, - {producer_id,int64}, - {producer_epoch,int16}]; -rsp(init_producer_id, 2) -> + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{index,int32}, + {error_code,int16}, + {snapshot_id, + [{end_offset,int64}, + {epoch,int32}, + {tagged_fields,tagged_fields}]}, + {size,int64}, + {position,int64}, + {unaligned_records,compact_records}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_cluster, 0) -> [{throttle_time_ms,int32}, {error_code,int16}, - {producer_id,int64}, - {producer_epoch,int16}, + {error_message,compact_nullable_string}, + {cluster_id,compact_string}, + {controller_id,int32}, + {brokers,{compact_array,[{broker_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {cluster_authorized_operations,int32}, {tagged_fields,tagged_fields}]; -rsp(offset_for_leader_epoch, 0) -> - [{topics,{array,[{topic,string}, - {partitions,{array,[{error_code,int16}, - {partition,int32}, - {end_offset,int64}]}}]}}]; -rsp(offset_for_leader_epoch, 1) -> - [{topics,{array,[{topic,string}, - {partitions,{array,[{error_code,int16}, - {partition,int32}, - {leader_epoch,int32}, - {end_offset,int64}]}}]}}]; -rsp(offset_for_leader_epoch, V) when V >= 2, V =< 3 -> - [{throttle_time_ms,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{error_code,int16}, - {partition,int32}, - {leader_epoch,int32}, - {end_offset,int64}]}}]}}]; -rsp(add_partitions_to_txn, V) when V >= 0, V =< 1 -> - [{throttle_time_ms,int32}, - {errors, - {array, - [{topic,string}, - {partition_errors, - {array,[{partition,int32},{error_code,int16}]}}]}}]; -rsp(add_offsets_to_txn, V) when V >= 0, V =< 1 -> - [{throttle_time_ms,int32},{error_code,int16}]; -rsp(end_txn, V) when V >= 0, V =< 1 -> - [{throttle_time_ms,int32},{error_code,int16}]; -rsp(txn_offset_commit, V) when V >= 0, V =< 2 -> - [{throttle_time_ms,int32}, - {topics,{array,[{name,string}, - {partitions,{array,[{partition_index,int32}, - {error_code,int16}]}}]}}]; -rsp(describe_acls, 0) -> +rsp(describe_cluster, 1) -> [{throttle_time_ms,int32}, {error_code,int16}, - {error_message,nullable_string}, - {resources,{array,[{resource_type,int8}, - {resource_name,string}, - {acls,{array,[{principal,string}, - {host,string}, - {operation,int8}, - {permission_type,int8}]}}]}}]; -rsp(describe_acls, 1) -> + {error_message,compact_nullable_string}, + {endpoint_type,int8}, + {cluster_id,compact_string}, + {controller_id,int32}, + {brokers,{compact_array,[{broker_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {cluster_authorized_operations,int32}, + {tagged_fields,tagged_fields}]; +rsp(describe_cluster, 2) -> [{throttle_time_ms,int32}, {error_code,int16}, - {error_message,nullable_string}, - {resources,{array,[{resource_type,int8}, - {resource_name,string}, - {resource_pattern_type,int8}, - {acls,{array,[{principal,string}, - {host,string}, - {operation,int8}, - {permission_type,int8}]}}]}}]; -rsp(create_acls, V) when V >= 0, V =< 1 -> + {error_message,compact_nullable_string}, + {endpoint_type,int8}, + {cluster_id,compact_string}, + {controller_id,int32}, + {brokers,{compact_array,[{broker_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {is_fenced,boolean}, + {tagged_fields,tagged_fields}]}}, + {cluster_authorized_operations,int32}, + {tagged_fields,tagged_fields}]; +rsp(describe_producers, 0) -> [{throttle_time_ms,int32}, - {creation_responses,{array,[{error_code,int16}, - {error_message,nullable_string}]}}]; -rsp(delete_acls, 0) -> + {topics, + {compact_array, + [{name,compact_string}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {active_producers, + {compact_array, + [{producer_id,int64}, + {producer_epoch,int32}, + {last_sequence,int32}, + {last_timestamp,int64}, + {coordinator_epoch,int32}, + {current_txn_start_offset,int64}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(unregister_broker, 0) -> [{throttle_time_ms,int32}, - {filter_responses, - {array, - [{error_code,int16}, - {error_message,nullable_string}, - {matching_acls, - {array, - [{error_code,int16}, - {error_message,nullable_string}, - {resource_type,int8}, - {resource_name,string}, - {principal,string}, - {host,string}, - {operation,int8}, - {permission_type,int8}]}}]}}]; -rsp(delete_acls, 1) -> + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]; +rsp(describe_transactions, 0) -> [{throttle_time_ms,int32}, - {filter_responses, - {array, + {transaction_states, + {compact_array, [{error_code,int16}, - {error_message,nullable_string}, - {matching_acls, - {array, - [{error_code,int16}, - {error_message,nullable_string}, - {resource_type,int8}, - {resource_name,string}, - {resource_pattern_type,int8}, - {principal,string}, - {host,string}, - {operation,int8}, - {permission_type,int8}]}}]}}]; -rsp(describe_configs, 0) -> + {transactional_id,compact_string}, + {transaction_state,compact_string}, + {transaction_timeout_ms,int32}, + {transaction_start_time_ms,int64}, + {producer_id,int64}, + {producer_epoch,int16}, + {topics, + {compact_array, + [{topic,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_transactions, V) when V >= 0, V =< 2 -> [{throttle_time_ms,int32}, - {resources, - {array, - [{error_code,int16}, - {error_message,nullable_string}, - {resource_type,int8}, - {resource_name,string}, - {config_entries, - {array, - [{config_name,string}, - {config_value,nullable_string}, - {read_only,boolean}, - {is_default,boolean}, - {is_sensitive,boolean}]}}]}}]; -rsp(describe_configs, V) when V >= 1, V =< 2 -> + {error_code,int16}, + {unknown_state_filters,{compact_array,compact_string}}, + {transaction_states,{compact_array,[{transactional_id,compact_string}, + {producer_id,int64}, + {transaction_state,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(consumer_group_heartbeat, V) when V >= 0, V =< 1 -> [{throttle_time_ms,int32}, - {resources, - {array, + {error_code,int16}, + {error_message,compact_nullable_string}, + {member_id,compact_nullable_string}, + {member_epoch,int32}, + {heartbeat_interval_ms,int32}, + {assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {tagged_fields,tagged_fields}]; +rsp(consumer_group_describe, 0) -> + [{throttle_time_ms,int32}, + {groups, + {compact_array, [{error_code,int16}, - {error_message,nullable_string}, - {resource_type,int8}, - {resource_name,string}, - {config_entries, - {array, - [{config_name,string}, - {config_value,nullable_string}, - {read_only,boolean}, - {config_source,int8}, - {is_sensitive,boolean}, - {config_synonyms, - {array, - [{config_name,string}, - {config_value,nullable_string}, - {config_source,int8}]}}]}}]}}]; -rsp(alter_configs, V) when V >= 0, V =< 1 -> + {error_message,compact_nullable_string}, + {group_id,compact_string}, + {group_state,compact_string}, + {group_epoch,int32}, + {assignment_epoch,int32}, + {assignor_name,compact_string}, + {members, + {compact_array, + [{member_id,compact_string}, + {instance_id,compact_nullable_string}, + {rack_id,compact_nullable_string}, + {member_epoch,int32}, + {client_id,compact_string}, + {client_host,compact_string}, + {subscribed_topic_names,{compact_array,compact_string}}, + {subscribed_topic_regex,compact_nullable_string}, + {assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {topic_name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {target_assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {topic_name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {tagged_fields,tagged_fields}]}}, + {authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(consumer_group_describe, 1) -> [{throttle_time_ms,int32}, - {resources,{array,[{error_code,int16}, - {error_message,nullable_string}, - {resource_type,int8}, - {resource_name,string}]}}]; -rsp(alter_replica_log_dirs, V) when V >= 0, V =< 1 -> + {groups, + {compact_array, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {group_id,compact_string}, + {group_state,compact_string}, + {group_epoch,int32}, + {assignment_epoch,int32}, + {assignor_name,compact_string}, + {members, + {compact_array, + [{member_id,compact_string}, + {instance_id,compact_nullable_string}, + {rack_id,compact_nullable_string}, + {member_epoch,int32}, + {client_id,compact_string}, + {client_host,compact_string}, + {subscribed_topic_names,{compact_array,compact_string}}, + {subscribed_topic_regex,compact_nullable_string}, + {assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {topic_name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {target_assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {topic_name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {member_type,int8}, + {tagged_fields,tagged_fields}]}}, + {authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(controller_registration, 0) -> [{throttle_time_ms,int32}, - {topics,{array,[{topic,string}, - {partitions,{array,[{partition,int32}, - {error_code,int16}]}}]}}]; -rsp(describe_log_dirs, V) when V >= 0, V =< 1 -> + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]; +rsp(get_telemetry_subscriptions, 0) -> [{throttle_time_ms,int32}, - {log_dirs, - {array, - [{error_code,int16}, - {log_dir,string}, + {error_code,int16}, + {client_instance_id,uuid}, + {subscription_id,int32}, + {accepted_compression_types,{compact_array,int8}}, + {push_interval_ms,int32}, + {telemetry_max_bytes,int32}, + {delta_temporality,boolean}, + {requested_metrics,{compact_array,compact_string}}, + {tagged_fields,tagged_fields}]; +rsp(push_telemetry, 0) -> + [{throttle_time_ms,int32},{error_code,int16},{tagged_fields,tagged_fields}]; +rsp(assign_replicas_to_dirs, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {directories, + {compact_array, + [{id,uuid}, {topics, - {array, - [{topic,string}, + {compact_array, + [{topic_id,uuid}, {partitions, - {array, - [{partition,int32}, - {size,int64}, - {offset_lag,int64}, - {is_future,boolean}]}}]}}]}}]; -rsp(sasl_authenticate, 0) -> - [{error_code,int16},{error_message,nullable_string},{auth_bytes,bytes}]; -rsp(sasl_authenticate, 1) -> - [{error_code,int16}, - {error_message,nullable_string}, - {auth_bytes,bytes}, - {session_lifetime_ms,int64}]; -rsp(create_partitions, V) when V >= 0, V =< 1 -> - [{throttle_time_ms,int32}, - {topic_errors,{array,[{topic,string}, - {error_code,int16}, - {error_message,nullable_string}]}}]; -rsp(create_delegation_token, V) when V >= 0, V =< 1 -> - [{error_code,int16}, - {principal_type,string}, - {principal_name,string}, - {issue_timestamp_ms,int64}, - {expiry_timestamp_ms,int64}, - {max_timestamp_ms,int64}, - {token_id,string}, - {hmac,bytes}, - {throttle_time_ms,int32}]; -rsp(create_delegation_token, 2) -> - [{error_code,int16}, - {principal_type,compact_string}, - {principal_name,compact_string}, - {issue_timestamp_ms,int64}, - {expiry_timestamp_ms,int64}, - {max_timestamp_ms,int64}, - {token_id,compact_string}, - {hmac,compact_bytes}, - {throttle_time_ms,int32}, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(renew_delegation_token, V) when V >= 0, V =< 1 -> - [{error_code,int16},{expiry_timestamp_ms,int64},{throttle_time_ms,int32}]; -rsp(expire_delegation_token, V) when V >= 0, V =< 1 -> - [{error_code,int16},{expiry_timestamp_ms,int64},{throttle_time_ms,int32}]; -rsp(describe_delegation_token, V) when V >= 0, V =< 1 -> - [{error_code,int16}, - {tokens,{array,[{principal_type,string}, - {principal_name,string}, - {issue_timestamp,int64}, - {expiry_timestamp,int64}, - {max_timestamp,int64}, - {token_id,string}, - {hmac,bytes}, - {renewers,{array,[{principal_type,string}, - {principal_name,string}]}}]}}, - {throttle_time_ms,int32}]; -rsp(delete_groups, V) when V >= 0, V =< 1 -> +rsp(list_config_resources, 0) -> [{throttle_time_ms,int32}, - {results,{array,[{group_id,string},{error_code,int16}]}}]; -rsp(delete_groups, 2) -> + {error_code,int16}, + {config_resources,{compact_array,[{resource_name,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(list_config_resources, 1) -> [{throttle_time_ms,int32}, - {results,{compact_array,[{group_id,compact_string}, - {error_code,int16}, - {tagged_fields,tagged_fields}]}}, + {error_code,int16}, + {config_resources,{compact_array,[{resource_name,compact_string}, + {resource_type,int8}, + {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(elect_leaders, 0) -> +rsp(describe_topic_partitions, 0) -> [{throttle_time_ms,int32}, - {replica_election_results, - {array, - [{topic,string}, - {partition_result, - {array, - [{partition_id,int32}, - {error_code,int16}, - {error_message,nullable_string}]}}]}}]; -rsp(elect_leaders, 1) -> + {topics, + {compact_array, + [{error_code,int16}, + {name,compact_nullable_string}, + {topic_id,uuid}, + {is_internal,boolean}, + {partitions, + {compact_array, + [{error_code,int16}, + {partition_index,int32}, + {leader_id,int32}, + {leader_epoch,int32}, + {replica_nodes,{compact_array,int32}}, + {isr_nodes,{compact_array,int32}}, + {eligible_leader_replicas,{compact_array,int32}}, + {last_known_elr,{compact_array,int32}}, + {offline_replicas,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {topic_authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {next_cursor, + [{topic_name,compact_string}, + {partition_index,int32}, + {tagged_fields,tagged_fields}]}, + {tagged_fields,tagged_fields}]; +rsp(share_group_heartbeat, 1) -> [{throttle_time_ms,int32}, {error_code,int16}, - {replica_election_results, - {array, - [{topic,string}, - {partition_result, - {array, - [{partition_id,int32}, - {error_code,int16}, - {error_message,nullable_string}]}}]}}]; -rsp(elect_leaders, 2) -> + {error_message,compact_nullable_string}, + {member_id,compact_nullable_string}, + {member_epoch,int32}, + {heartbeat_interval_ms,int32}, + {assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {tagged_fields,tagged_fields}]; +rsp(share_group_describe, 1) -> [{throttle_time_ms,int32}, - {error_code,int16}, - {replica_election_results, + {groups, {compact_array, - [{topic,compact_string}, - {partition_result, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {group_id,compact_string}, + {group_state,compact_string}, + {group_epoch,int32}, + {assignment_epoch,int32}, + {assignor_name,compact_string}, + {members, {compact_array, - [{partition_id,int32}, - {error_code,int16}, - {error_message,compact_nullable_string}, + [{member_id,compact_string}, + {rack_id,compact_nullable_string}, + {member_epoch,int32}, + {client_id,compact_string}, + {client_host,compact_string}, + {subscribed_topic_names,{compact_array,compact_string}}, + {assignment, + [{topic_partitions, + {compact_array, + [{topic_id,uuid}, + {topic_name,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, {tagged_fields,tagged_fields}]}}, + {authorized_operations,int32}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(incremental_alter_configs, 0) -> +rsp(share_fetch, 1) -> [{throttle_time_ms,int32}, - {responses,{array,[{error_code,int16}, - {error_message,nullable_string}, - {resource_type,int8}, - {resource_name,string}]}}]; -rsp(incremental_alter_configs, 1) -> - [{throttle_time_ms,int32}, - {responses,{compact_array,[{error_code,int16}, - {error_message,compact_nullable_string}, - {resource_type,int8}, - {resource_name,compact_string}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {acquisition_lock_timeout_ms,int32}, + {responses, + {compact_array, + [{topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {acknowledge_error_code,int16}, + {acknowledge_error_message,compact_nullable_string}, + {current_leader, + [{leader_id,int32}, + {leader_epoch,int32}, + {tagged_fields,tagged_fields}]}, + {records,compact_records}, + {acquired_records, + {compact_array, + [{first_offset,int64}, + {last_offset,int64}, + {delivery_count,int16}, {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {node_endpoints, + {compact_array, + [{node_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(alter_partition_reassignments, 0) -> +rsp(share_acknowledge, 1) -> [{throttle_time_ms,int32}, {error_code,int16}, {error_message,compact_nullable_string}, {responses, {compact_array, - [{name,compact_string}, + [{topic_id,uuid}, {partitions, {compact_array, [{partition_index,int32}, {error_code,int16}, {error_message,compact_nullable_string}, + {current_leader, + [{leader_id,int32}, + {leader_epoch,int32}, + {tagged_fields,tagged_fields}]}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]}}, + {node_endpoints, + {compact_array, + [{node_id,int32}, + {host,compact_string}, + {port,int32}, + {rack,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(list_partition_reassignments, 0) -> +rsp(add_raft_voter, 0) -> [{throttle_time_ms,int32}, {error_code,int16}, {error_message,compact_nullable_string}, - {topics, + {tagged_fields,tagged_fields}]; +rsp(remove_raft_voter, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]; +rsp(update_raft_voter, 0) -> + [{throttle_time_ms,int32},{error_code,int16},{tagged_fields,tagged_fields}]; +rsp(streams_group_heartbeat, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {member_id,compact_string}, + {member_epoch,int32}, + {heartbeat_interval_ms,int32}, + {acceptable_recovery_lag,int32}, + {task_offset_interval_ms,int32}, + {status, {compact_array, - [{name,compact_string}, + [{status_code,int8}, + {status_detail,compact_string}, + {tagged_fields,tagged_fields}]}}, + {active_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {standby_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {warmup_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {endpoint_information_epoch,int32}, + {partitions_by_user_endpoint, + {compact_array, + [{user_endpoint, + [{host,compact_string}, + {port,uint16}, + {tagged_fields,tagged_fields}]}, + {active_partitions, + {compact_array, + [{topic,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {standby_partitions, + {compact_array, + [{topic,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(streams_group_describe, 0) -> + [{throttle_time_ms,int32}, + {groups, + {compact_array, + [{error_code,int16}, + {error_message,compact_nullable_string}, + {group_id,compact_string}, + {group_state,compact_string}, + {group_epoch,int32}, + {assignment_epoch,int32}, + {topology, + [{epoch,int32}, + {subtopologies, + {compact_array, + [{subtopology_id,compact_string}, + {source_topics,{compact_array,compact_string}}, + {repartition_sink_topics,{compact_array,compact_string}}, + {state_changelog_topics, + {compact_array, + [{name,compact_string}, + {partitions,int32}, + {replication_factor,int16}, + {topic_configs, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {repartition_source_topics, + {compact_array, + [{name,compact_string}, + {partitions,int32}, + {replication_factor,int16}, + {topic_configs, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {members, + {compact_array, + [{member_id,compact_string}, + {member_epoch,int32}, + {instance_id,compact_nullable_string}, + {rack_id,compact_nullable_string}, + {client_id,compact_string}, + {client_host,compact_string}, + {topology_epoch,int32}, + {process_id,compact_string}, + {user_endpoint, + [{host,compact_string},{port,uint16},{tagged_fields,tagged_fields}]}, + {client_tags, + {compact_array, + [{key,compact_string}, + {value,compact_string}, + {tagged_fields,tagged_fields}]}}, + {task_offsets, + {compact_array, + [{subtopology_id,compact_string}, + {partition,int32}, + {offset,int64}, + {tagged_fields,tagged_fields}]}}, + {task_end_offsets, + {compact_array, + [{subtopology_id,compact_string}, + {partition,int32}, + {offset,int64}, + {tagged_fields,tagged_fields}]}}, + {assignment, + [{active_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {standby_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {warmup_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {target_assignment, + [{active_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {standby_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {warmup_tasks, + {compact_array, + [{subtopology_id,compact_string}, + {partitions,{compact_array,int32}}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}, + {is_classic,boolean}, + {tagged_fields,tagged_fields}]}}, + {authorized_operations,int32}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(describe_share_group_offsets, 0) -> + [{throttle_time_ms,int32}, + {groups, + {compact_array, + [{group_id,compact_string}, + {topics, + {compact_array, + [{topic_name,compact_string}, + {topic_id,uuid}, + {partitions, + {compact_array, + [{partition_index,int32}, + {start_offset,int64}, + {leader_epoch,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]}}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]; +rsp(alter_share_group_offsets, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {responses, + {compact_array, + [{topic_name,compact_string}, + {topic_id,uuid}, {partitions, {compact_array, [{partition_index,int32}, - {replicas,{compact_array,int32}}, - {adding_replicas,{compact_array,int32}}, - {removing_replicas,{compact_array,int32}}, + {error_code,int16}, + {error_message,compact_nullable_string}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]}}, {tagged_fields,tagged_fields}]; -rsp(offset_delete, 0) -> - [{error_code,int16}, - {throttle_time_ms,int32}, - {topics,{array,[{name,string}, - {partitions,{array,[{partition_index,int32}, - {error_code,int16}]}}]}}]. +rsp(delete_share_group_offsets, 0) -> + [{throttle_time_ms,int32}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {responses,{compact_array,[{topic_name,compact_string}, + {topic_id,uuid}, + {error_code,int16}, + {error_message,compact_nullable_string}, + {tagged_fields,tagged_fields}]}}, + {tagged_fields,tagged_fields}]. ec(0) -> no_error; ec(-1) -> unknown_server_error; ec(1) -> offset_out_of_range; @@ -1893,4 +4185,4 @@ ec(85) -> no_reassignment_in_progress; ec(86) -> group_subscribed_to_topic; ec(87) -> invalid_record; ec(88) -> unstable_offset_commit; -ec(UnknownCode) -> UnknownCode. +ec(ErrorCode) -> ErrorCode. diff --git a/test/kpro_fetch_tests.erl b/test/kpro_fetch_tests.erl index f19d187..6ea1f99 100644 --- a/test/kpro_fetch_tests.erl +++ b/test/kpro_fetch_tests.erl @@ -56,7 +56,17 @@ test_incemental_fetch(Connection, Vsn) -> LatestOffset = kpro_test_lib:list_offset(Connection, ?TOPIC, ?PARTI, latest, 5000), %% session-id=0 and epoch=0 to initialize a session - Req0 = kpro_req_lib:fetch(Vsn, ?TOPIC, ?PARTI, LatestOffset, + Topic = case Vsn >= 13 of + true -> + {ok, #kpro_rsp{msg = #{topics := [#{topic_id := TopicId}]}}} = + kpro:request_sync(Connection, + kpro_req_lib:metadata(13, [?TOPIC]), + ?TIMEOUT), + TopicId; + false -> + ?TOPIC + end, + Req0 = kpro_req_lib:fetch(Vsn, Topic, ?PARTI, LatestOffset, #{ session_id => 0 , session_epoch => 0 , max_bytes => 1 @@ -66,11 +76,11 @@ test_incemental_fetch(Connection, Vsn) -> #{header := Header0} = kpro_test_lib:parse_rsp(Rsp0), #{last_stable_offset := LatestOffset1} = Header0, ?assertEqual(LatestOffset, LatestOffset1), - Req1 = kpro_req_lib:fetch(Vsn, ?TOPIC, ?PARTI, LatestOffset, + Req1 = kpro_req_lib:fetch(Vsn, Topic, ?PARTI, LatestOffset, #{ session_id => SessionId , session_epoch => 1 %% 0 + 1 , max_bytes => 1 - , max_wait_time => 10 %% ms + , max_wait_time_ms => 10 %% ms }), {ok, Rsp1} = kpro:request_sync(Connection, Req1, ?TIMEOUT), ?assertMatch(#kpro_rsp{msg = #{ error_code := no_error @@ -176,11 +186,20 @@ do_fetch(Connection, Topic, Vsn, BeginOffset, MaxBytes) -> lists:append([Msgs || {_Meta, Msgs} <- Batches]) end. -with_vsn_topic(Vsn, Topic) -> +with_vsn_topic(Vsn, TopicName) -> with_connection( random_config(), - Topic, + TopicName, fun(Connection) -> + %% session-id=0 and epoch=0 to initialize a session + Topic = case Vsn >= 13 of + true -> + Resp = kpro:request_sync(Connection, kpro_req_lib:metadata(13, [TopicName]), ?TIMEOUT), + {ok, #kpro_rsp{msg = #{topics := [#{topic_id := Id, error_code := no_error}]}}} = Resp, + Id; + false -> + TopicName + end, {BaseOffset, Messages} = produce_randomly(Vsn, Connection, Topic), fetch_and_verify(Connection, Topic, Vsn, BaseOffset, Messages) end). @@ -193,6 +212,17 @@ produce_randomly(_TestVsn, _Connection, _Topic, 0, Acc0) -> {BaseOffset, lists:append([lists:map(fun(M) -> {Vsn, LAT, M} end, Msg) || {_, Vsn, LAT, Msg} <- Acc])}; produce_randomly(TestVsn, Connection, Topic, Count, Acc) -> + TopicId = + case TestVsn >= 13 of + true -> + {ok, #kpro_rsp{msg = #{topics := [#{topic_id := Id, error_code := no_error}]}}} = + kpro:request_sync(Connection, + kpro_req_lib:metadata(13, [Topic]), + ?TIMEOUT), + Id; + false -> + Topic + end, {ok, Versions} = kpro:get_api_versions(Connection), {MinVsn, MaxVsn} = maps:get(produce, Versions), Vsn = case MinVsn =:= MaxVsn of @@ -201,7 +231,7 @@ produce_randomly(TestVsn, Connection, Topic, Count, Acc) -> end, Opts = rand_produce_opts(Vsn, TestVsn), Batch = make_random_batch(rand_num(?RAND_BATCH_SIZE)), - Req = kpro_req_lib:produce(Vsn, Topic, ?PARTI, Batch, Opts), + Req = kpro_req_lib:produce(Vsn, TopicId, ?PARTI, Batch, Opts), {ok, Rsp0} = kpro:request_sync(Connection, Req, ?TIMEOUT), #{ error_code := no_error , base_offset := Offset @@ -225,7 +255,7 @@ rand_num(N) -> (os:system_time() rem N) + 1. rand_element(L) -> lists:nth(rand_num(length(L)), L). make_req(Vsn, Topic, Offset, MaxBytes) -> - Opts = #{ max_wait_time => 500 + Opts = #{ max_wait_time_ms => 500 , max_bytes => MaxBytes }, kpro_req_lib:fetch(Vsn, Topic, ?PARTI, Offset, Opts). diff --git a/test/kpro_produce_req_encode_benchmark_tests.erl b/test/kpro_produce_req_encode_benchmark_tests.erl index f27c1f8..934941d 100644 --- a/test/kpro_produce_req_encode_benchmark_tests.erl +++ b/test/kpro_produce_req_encode_benchmark_tests.erl @@ -26,7 +26,7 @@ run_test_() -> {timeout, timer:seconds(30), fun() -> run_test(Batch, V) - end}} || V <- lists:seq(2, 3)]. + end}} || V <- lists:seq(3, 13)]. run_test(Batch, Vsn) -> lists:foreach(fun(_) -> diff --git a/test/kpro_test_lib.erl b/test/kpro_test_lib.erl index aa9b22b..af9b5e7 100644 --- a/test/kpro_test_lib.erl +++ b/test/kpro_test_lib.erl @@ -14,6 +14,8 @@ %%% -module(kpro_test_lib). +-include_lib("eunit/include/eunit.hrl"). + -export([ get_endpoints/1 , guess_protocol/1 ]). @@ -144,7 +146,16 @@ with_connection(Endpoints, Config, ConnectFun, WithConnFun) -> parse_rsp(#kpro_rsp{ api = list_offsets , msg = Msg }) -> - case get_partition_rsp(Msg) of + [Topics] = kpro:find(topics, Msg), + PartitionRsp = + try kpro:find(partitions, Topics) of + [Partitions] -> Partitions + catch + error:{no_such_field, partitions} -> + [Partitions] = kpro:find(partition_responses, Topics), + Partitions + end, + case PartitionRsp of #{offsets := [Offset]} = M -> M#{offset => Offset}; #{offset := _} = M -> M end; @@ -165,8 +176,8 @@ parse_rsp(#kpro_rsp{ api = fetch {undefined, [], ?no_error}; _ -> PartitionRsp = get_partition_rsp(Msg), - Header0 = kpro:find(partition_header, PartitionRsp), - Records = kpro:find(record_set, PartitionRsp), + Header0 = PartitionRsp, + Records = kpro:find(records, PartitionRsp), ECx = kpro:find(error_code, Header0), {Header0, decode_batches(Vsn, Records), ECx} end, @@ -222,8 +233,13 @@ decode_batches(_Vsn, Bin) -> get_partition_rsp(Struct) -> [TopicRsp] = kpro:find(responses, Struct), - [PartitionRsp] = kpro:find(partition_responses, TopicRsp), - PartitionRsp. + try kpro:find(partitions, TopicRsp) of + [PartitionRsp] -> PartitionRsp + catch + error:{no_such_field, partitions} -> + [PartitionRsp] = kpro:find(partition_responses, TopicRsp), + PartitionRsp + end. %% Return ok if all error codes are 'no_error' %% otherwise return {error, Errors} where Errors is a list of error codes