From d3946319193173946336d0e510f59a661d3cd06d Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 26 Feb 2025 15:29:41 -0800 Subject: [PATCH 01/13] notes --- baseline_api_notes | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 baseline_api_notes diff --git a/baseline_api_notes b/baseline_api_notes new file mode 100644 index 000000000..f350813d3 --- /dev/null +++ b/baseline_api_notes @@ -0,0 +1,78 @@ +Produce (0): +current: 7 / 2.1 baseline! +2.1 => 7 +3.0 => 9 +3.9 => 11 +kafka/producer/sender.py: version = self._client.api_version(ProduceRequest, max_version=7) + +Fetch (1): +current: 4 +2.1 => 10 +3.0 => 12 +3.9 => 17 +kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=4) +# Requires KIP-320, leader epoch handling + +ListOffsets (2): +current: 1 +2.1 => 4 +3.0 => 7 +3.9 => 9 +kafka/consumer/fetcher.py: version = self._client.api_version(OffsetRequest, max_version=1) + +Metadata (3): +current: 7 / 2.1 baseline! +2.1 => 7 +3.0 => 11 +3.9 => 12 +kafka/client_async.py: api_version = self.api_version(MetadataRequest, max_version=7) + +OffsetCommit (8): +current: 2 +2.1 => 6 +3.0 => 8 +3.9 => 9 +kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=2) + +OffsetFetch (9): +current: 1 +2.1 => 5 +3.0 => 8 +3.9 => 9 +kafka/coordinator/consumer.py: version = self._client.api_version(OffsetFetchRequest, max_version=1) + +FindCoordinator(10): +current: 0 +2.1 => 2 +3.0 => 4 +3.9 => 6 +kafka/coordinator/base.py: request = GroupCoordinatorRequest[0](self.group_id) + +JoinGroup(11): +current: 2 +2.1 => 3 +3.0 => 7 +3.9 => 9 +kafka/coordinator/base.py: version = self._client.api_version(JoinGroupRequest, max_version=2) + +Heartbeat (12) +current: 1 +2.1 => 2 +3.0 => 4 +3.9 => 4 +kafka/coordinator/base.py: version = self._client.api_version(HeartbeatRequest, max_version=1) + +LeaveGroup (13): +current: 1 +2.1 => 2 +3.0 => 4 +3.9 => 5 +kafka/coordinator/base.py: version = self._client.api_version(LeaveGroupRequest, max_version=1) + +SyncGroup (14): +current: 1 +2.1 => 2 +3.0 => 5 +3.9 => 5 +kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) +kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) From 3ce052d3b6f06ffbbc0ad19574c4c2c0d0250d44 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 26 Feb 2025 15:40:17 -0800 Subject: [PATCH 02/13] update fetch => 6 --- baseline_api_notes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/baseline_api_notes b/baseline_api_notes index f350813d3..6a2a69463 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -6,7 +6,7 @@ current: 7 / 2.1 baseline! kafka/producer/sender.py: version = self._client.api_version(ProduceRequest, max_version=7) Fetch (1): -current: 4 +current: 6 2.1 => 10 3.0 => 12 3.9 => 17 From 8dd328728df64a73d88beca927d0c343bd81ca5d Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 26 Feb 2025 17:09:13 -0800 Subject: [PATCH 03/13] list offsets => 3; note re fencing --- baseline_api_notes | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index 6a2a69463..1a2e4d170 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -11,14 +11,15 @@ current: 6 3.0 => 12 3.9 => 17 kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=4) -# Requires KIP-320, leader epoch handling +# Requires KIP-320, leader epoch handling / fencing ListOffsets (2): -current: 1 +current: 3 2.1 => 4 3.0 => 7 3.9 => 9 kafka/consumer/fetcher.py: version = self._client.api_version(OffsetRequest, max_version=1) +# Requires KIP-320, leader epoch handling / fencing Metadata (3): current: 7 / 2.1 baseline! From 8b5f7988741e5ba49b0077c0ad5859cc742f4b28 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 26 Feb 2025 17:29:02 -0800 Subject: [PATCH 04/13] FindCoordinator => 2; more notes re fencing --- baseline_api_notes | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/baseline_api_notes b/baseline_api_notes index 1a2e4d170..e1a747d2b 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -34,6 +34,7 @@ current: 2 3.0 => 8 3.9 => 9 kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=2) +# Requires KIP-320, leader epoch handling / fencing OffsetFetch (9): current: 1 @@ -41,9 +42,10 @@ current: 1 3.0 => 8 3.9 => 9 kafka/coordinator/consumer.py: version = self._client.api_version(OffsetFetchRequest, max_version=1) +# Requires KIP-320, leader epoch handling / fencing FindCoordinator(10): -current: 0 +current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 6 From b763f76c8f42f1a1dae29352d1f4ae5322459ab2 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 26 Feb 2025 18:10:23 -0800 Subject: [PATCH 05/13] notes re api versions + sasl --- baseline_api_notes | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/baseline_api_notes b/baseline_api_notes index e1a747d2b..9977fe7d5 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -79,3 +79,21 @@ current: 1 3.9 => 5 kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) + +ApiVersions (18): +current: 1 +2.1 => 2 +3.0 => 3 +3.9 => 4 + +SaslHandshake (17): +current: 0 +2.1 => 1 +3.0 => 1 +3.9 => 1 + +SaslAuthenticate (36): +current: not implemented +2.1 => 0 +3.0 => 1 +3.9 => 2 From 28a094d313fc6c92fc32a9c1e673cd3c02be0cae Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Thu, 27 Feb 2025 06:34:42 -0800 Subject: [PATCH 06/13] bump group apis; note re incremental fetch --- baseline_api_notes | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index 9977fe7d5..e27bc6c30 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -11,6 +11,7 @@ current: 6 3.0 => 12 3.9 => 17 kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=4) +# Requires KIP-227, incremental fetches # Requires KIP-320, leader epoch handling / fencing ListOffsets (2): @@ -52,28 +53,28 @@ current: 2 / 2.1 baseline! kafka/coordinator/base.py: request = GroupCoordinatorRequest[0](self.group_id) JoinGroup(11): -current: 2 +current: 3 / 2.1 baseline! 2.1 => 3 3.0 => 7 3.9 => 9 kafka/coordinator/base.py: version = self._client.api_version(JoinGroupRequest, max_version=2) Heartbeat (12) -current: 1 +current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 4 kafka/coordinator/base.py: version = self._client.api_version(HeartbeatRequest, max_version=1) LeaveGroup (13): -current: 1 +current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 5 kafka/coordinator/base.py: version = self._client.api_version(LeaveGroupRequest, max_version=1) SyncGroup (14): -current: 1 +current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 5 3.9 => 5 From 24a0aafc371e856a4f8dc680a8c613eb1be98689 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Thu, 27 Feb 2025 08:02:07 -0800 Subject: [PATCH 07/13] link to sasl auth kip; link to kafka-python jira; more notes re fencing implementation --- baseline_api_notes | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/baseline_api_notes b/baseline_api_notes index e27bc6c30..31312d42e 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -1,3 +1,5 @@ +# Discussion here: https://issues.apache.org/jira/browse/KAFKA-18648 + Produce (0): current: 7 / 2.1 baseline! 2.1 => 7 @@ -13,6 +15,9 @@ current: 6 kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=4) # Requires KIP-227, incremental fetches # Requires KIP-320, leader epoch handling / fencing +# -> minimal, just send -1 epoch (java clients did this in 2.1 and 2.2) +# -> detect log truncation KAFKA-7747 (enabled in v9, recommended for v11 per https://github.com/tulios/kafkajs/issues/1464) +# v10 is zstandard compression ListOffsets (2): current: 3 @@ -98,3 +103,4 @@ current: not implemented 2.1 => 0 3.0 => 1 3.9 => 2 +see https://cwiki.apache.org/confluence/display/KAFKA/KIP-152+-+Improve+diagnostics+for+SASL+authentication+failures From 37404d981407cabfdab6ed449b901944c37d1d60 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Mon, 3 Mar 2025 13:01:47 -0800 Subject: [PATCH 08/13] incremental fetch; offset commit/fetch baseline; apiversions baseline --- baseline_api_notes | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index 31312d42e..858b2379d 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -8,12 +8,11 @@ current: 7 / 2.1 baseline! kafka/producer/sender.py: version = self._client.api_version(ProduceRequest, max_version=7) Fetch (1): -current: 6 +current: 7 2.1 => 10 3.0 => 12 3.9 => 17 kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=4) -# Requires KIP-227, incremental fetches # Requires KIP-320, leader epoch handling / fencing # -> minimal, just send -1 epoch (java clients did this in 2.1 and 2.2) # -> detect log truncation KAFKA-7747 (enabled in v9, recommended for v11 per https://github.com/tulios/kafkajs/issues/1464) @@ -35,7 +34,7 @@ current: 7 / 2.1 baseline! kafka/client_async.py: api_version = self.api_version(MetadataRequest, max_version=7) OffsetCommit (8): -current: 2 +current: 6 / 2.1 baseline! 2.1 => 6 3.0 => 8 3.9 => 9 @@ -43,7 +42,7 @@ kafka/coordinator/consumer.py: version = self._client.api_version(OffsetC # Requires KIP-320, leader epoch handling / fencing OffsetFetch (9): -current: 1 +current: 5 / 2.1 baseline! 2.1 => 5 3.0 => 8 3.9 => 9 @@ -87,7 +86,7 @@ kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRe kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) ApiVersions (18): -current: 1 +current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 3 3.9 => 4 From 9dc8405c35094d7fabbea20896400edb00edebe7 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Mon, 3 Mar 2025 15:12:40 -0800 Subject: [PATCH 09/13] updates --- baseline_api_notes | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index 858b2379d..c818003b9 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -8,11 +8,11 @@ current: 7 / 2.1 baseline! kafka/producer/sender.py: version = self._client.api_version(ProduceRequest, max_version=7) Fetch (1): -current: 7 +current: 8 2.1 => 10 3.0 => 12 3.9 => 17 -kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=4) +kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=8) # Requires KIP-320, leader epoch handling / fencing # -> minimal, just send -1 epoch (java clients did this in 2.1 and 2.2) # -> detect log truncation KAFKA-7747 (enabled in v9, recommended for v11 per https://github.com/tulios/kafkajs/issues/1464) @@ -23,7 +23,7 @@ current: 3 2.1 => 4 3.0 => 7 3.9 => 9 -kafka/consumer/fetcher.py: version = self._client.api_version(OffsetRequest, max_version=1) +kafka/consumer/fetcher.py: version = self._client.api_version(OffsetRequest, max_version=3) # Requires KIP-320, leader epoch handling / fencing Metadata (3): @@ -38,7 +38,7 @@ current: 6 / 2.1 baseline! 2.1 => 6 3.0 => 8 3.9 => 9 -kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=2) +kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=6) # Requires KIP-320, leader epoch handling / fencing OffsetFetch (9): @@ -46,7 +46,7 @@ current: 5 / 2.1 baseline! 2.1 => 5 3.0 => 8 3.9 => 9 -kafka/coordinator/consumer.py: version = self._client.api_version(OffsetFetchRequest, max_version=1) +kafka/coordinator/consumer.py: version = self._client.api_version(OffsetFetchRequest, max_version=5) # Requires KIP-320, leader epoch handling / fencing FindCoordinator(10): @@ -54,36 +54,36 @@ current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 6 -kafka/coordinator/base.py: request = GroupCoordinatorRequest[0](self.group_id) +kafka/coordinator/base.py: version = self._client.api_version(FindCoordinatorRequest, max_version=2) JoinGroup(11): current: 3 / 2.1 baseline! 2.1 => 3 3.0 => 7 3.9 => 9 -kafka/coordinator/base.py: version = self._client.api_version(JoinGroupRequest, max_version=2) +kafka/coordinator/base.py: version = self._client.api_version(JoinGroupRequest, max_version=3) Heartbeat (12) current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 4 -kafka/coordinator/base.py: version = self._client.api_version(HeartbeatRequest, max_version=1) +kafka/coordinator/base.py: version = self._client.api_version(HeartbeatRequest, max_version=2) LeaveGroup (13): current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 5 -kafka/coordinator/base.py: version = self._client.api_version(LeaveGroupRequest, max_version=1) +kafka/coordinator/base.py: version = self._client.api_version(LeaveGroupRequest, max_version=2) SyncGroup (14): current: 2 / 2.1 baseline! 2.1 => 2 3.0 => 5 3.9 => 5 -kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) -kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=1) +kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=2) +kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=2) ApiVersions (18): current: 2 / 2.1 baseline! From e47a71aba2d12f955c965540e0430cfb8e85e94b Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 5 Mar 2025 12:06:48 -0800 Subject: [PATCH 10/13] Update w/ leader_epoch baseline support --- baseline_api_notes | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index c818003b9..42025368b 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -8,23 +8,19 @@ current: 7 / 2.1 baseline! kafka/producer/sender.py: version = self._client.api_version(ProduceRequest, max_version=7) Fetch (1): -current: 8 +current: 10 / 2.1 baseline! 2.1 => 10 3.0 => 12 3.9 => 17 kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=8) -# Requires KIP-320, leader epoch handling / fencing -# -> minimal, just send -1 epoch (java clients did this in 2.1 and 2.2) -# -> detect log truncation KAFKA-7747 (enabled in v9, recommended for v11 per https://github.com/tulios/kafkajs/issues/1464) -# v10 is zstandard compression +# Still need log truncation KAFKA-7747 (enabled in v9, recommended for v11 per https://github.com/tulios/kafkajs/issues/1464) ListOffsets (2): -current: 3 +current: 4 / 2.1 baseline! 2.1 => 4 3.0 => 7 3.9 => 9 kafka/consumer/fetcher.py: version = self._client.api_version(OffsetRequest, max_version=3) -# Requires KIP-320, leader epoch handling / fencing Metadata (3): current: 7 / 2.1 baseline! @@ -39,7 +35,6 @@ current: 6 / 2.1 baseline! 3.0 => 8 3.9 => 9 kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=6) -# Requires KIP-320, leader epoch handling / fencing OffsetFetch (9): current: 5 / 2.1 baseline! @@ -47,7 +42,6 @@ current: 5 / 2.1 baseline! 3.0 => 8 3.9 => 9 kafka/coordinator/consumer.py: version = self._client.api_version(OffsetFetchRequest, max_version=5) -# Requires KIP-320, leader epoch handling / fencing FindCoordinator(10): current: 2 / 2.1 baseline! From 4c0127d446cf8412cb4ec34a8e1b7db462a1534b Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Tue, 11 Mar 2025 12:00:30 -0700 Subject: [PATCH 11/13] sasl updates + all at 2.1 baseline! --- baseline_api_notes | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index 42025368b..add3c1525 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -86,13 +86,13 @@ current: 2 / 2.1 baseline! 3.9 => 4 SaslHandshake (17): -current: 0 +current: 1 / 2.1 baseline! 2.1 => 1 3.0 => 1 3.9 => 1 SaslAuthenticate (36): -current: not implemented +current: 0 / 2.1 baseline! 2.1 => 0 3.0 => 1 3.9 => 2 From b77f331f2fd457a3ef9dcf3d58bbe98b93099b52 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Wed, 19 Mar 2025 10:15:57 -0700 Subject: [PATCH 12/13] fixup sasl authenticate --- baseline_api_notes | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index add3c1525..7134ed2db 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -94,6 +94,5 @@ current: 1 / 2.1 baseline! SaslAuthenticate (36): current: 0 / 2.1 baseline! 2.1 => 0 -3.0 => 1 +3.0 => 2 3.9 => 2 -see https://cwiki.apache.org/confluence/display/KAFKA/KIP-152+-+Improve+diagnostics+for+SASL+authentication+failures From abc6924510d4b54ed3bf726898b482a35b88a970 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Tue, 24 Jun 2025 15:20:00 -0700 Subject: [PATCH 13/13] updates --- baseline_api_notes | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/baseline_api_notes b/baseline_api_notes index 7134ed2db..4e0c5c91d 100644 --- a/baseline_api_notes +++ b/baseline_api_notes @@ -12,7 +12,7 @@ current: 10 / 2.1 baseline! 2.1 => 10 3.0 => 12 3.9 => 17 -kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=8) +kafka/consumer/fetcher.py: version = self._client.api_version(FetchRequest, max_version=10) # Still need log truncation KAFKA-7747 (enabled in v9, recommended for v11 per https://github.com/tulios/kafkajs/issues/1464) ListOffsets (2): @@ -20,7 +20,7 @@ current: 4 / 2.1 baseline! 2.1 => 4 3.0 => 7 3.9 => 9 -kafka/consumer/fetcher.py: version = self._client.api_version(OffsetRequest, max_version=3) +kafka/consumer/fetcher.py: version = self._client.api_version(ListOffsetsRequest, max_version=4) Metadata (3): current: 7 / 2.1 baseline! @@ -30,11 +30,11 @@ current: 7 / 2.1 baseline! kafka/client_async.py: api_version = self.api_version(MetadataRequest, max_version=7) OffsetCommit (8): -current: 6 / 2.1 baseline! +current: 7 / 2.1 baseline! 2.1 => 6 3.0 => 8 3.9 => 9 -kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=6) +kafka/coordinator/consumer.py: version = self._client.api_version(OffsetCommitRequest, max_version=7) OffsetFetch (9): current: 5 / 2.1 baseline! @@ -51,42 +51,42 @@ current: 2 / 2.1 baseline! kafka/coordinator/base.py: version = self._client.api_version(FindCoordinatorRequest, max_version=2) JoinGroup(11): -current: 3 / 2.1 baseline! +current: 5 / 2.1 baseline! 2.1 => 3 3.0 => 7 3.9 => 9 -kafka/coordinator/base.py: version = self._client.api_version(JoinGroupRequest, max_version=3) +kafka/coordinator/base.py: version = self._client.api_version(JoinGroupRequest, max_version=5) Heartbeat (12) -current: 2 / 2.1 baseline! +current: 3 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 4 -kafka/coordinator/base.py: version = self._client.api_version(HeartbeatRequest, max_version=2) +kafka/coordinator/base.py: version = self._client.api_version(HeartbeatRequest, max_version=3) LeaveGroup (13): -current: 2 / 2.1 baseline! +current: 3 / 2.1 baseline! 2.1 => 2 3.0 => 4 3.9 => 5 -kafka/coordinator/base.py: version = self._client.api_version(LeaveGroupRequest, max_version=2) +kafka/coordinator/base.py: version = self._client.api_version(LeaveGroupRequest, max_version=3) SyncGroup (14): -current: 2 / 2.1 baseline! +current: 3 / 2.1 baseline! 2.1 => 2 3.0 => 5 3.9 => 5 -kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=2) -kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=2) +kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=3) +kafka/coordinator/base.py: version = self._client.api_version(SyncGroupRequest, max_version=3) ApiVersions (18): -current: 2 / 2.1 baseline! +current: 4 / 3.9 baseline! 2.1 => 2 3.0 => 3 3.9 => 4 SaslHandshake (17): -current: 1 / 2.1 baseline! +current: 1 / 3.9 baseline! 2.1 => 1 3.0 => 1 3.9 => 1