kafka-python 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. kafka/__init__.py +34 -0
  2. kafka/__main__.py +5 -0
  3. kafka/admin/__init__.py +29 -0
  4. kafka/admin/__main__.py +5 -0
  5. kafka/admin/_acls.py +355 -0
  6. kafka/admin/_cluster.py +359 -0
  7. kafka/admin/_configs.py +479 -0
  8. kafka/admin/_groups.py +754 -0
  9. kafka/admin/_partitions.py +595 -0
  10. kafka/admin/_topics.py +281 -0
  11. kafka/admin/_transactions.py +450 -0
  12. kafka/admin/_users.py +194 -0
  13. kafka/admin/client.py +373 -0
  14. kafka/benchmarks/__init__.py +0 -0
  15. kafka/benchmarks/consumer_performance.py +138 -0
  16. kafka/benchmarks/load_example.py +109 -0
  17. kafka/benchmarks/producer_encode_path.py +201 -0
  18. kafka/benchmarks/producer_performance.py +161 -0
  19. kafka/benchmarks/profile_protocol.py +138 -0
  20. kafka/benchmarks/protocol_old_vs_new.py +447 -0
  21. kafka/benchmarks/record_batch_compose.py +77 -0
  22. kafka/benchmarks/record_batch_read.py +82 -0
  23. kafka/benchmarks/varint_speed.py +426 -0
  24. kafka/cli/__init__.py +36 -0
  25. kafka/cli/admin/__init__.py +117 -0
  26. kafka/cli/admin/acls/__init__.py +9 -0
  27. kafka/cli/admin/acls/common.py +76 -0
  28. kafka/cli/admin/acls/create.py +19 -0
  29. kafka/cli/admin/acls/delete.py +23 -0
  30. kafka/cli/admin/acls/describe.py +16 -0
  31. kafka/cli/admin/cluster/__init__.py +14 -0
  32. kafka/cli/admin/cluster/describe.py +11 -0
  33. kafka/cli/admin/cluster/describe_quorum.py +11 -0
  34. kafka/cli/admin/cluster/features.py +52 -0
  35. kafka/cli/admin/cluster/log_dirs.py +43 -0
  36. kafka/cli/admin/cluster/versions.py +33 -0
  37. kafka/cli/admin/configs/__init__.py +10 -0
  38. kafka/cli/admin/configs/alter.py +43 -0
  39. kafka/cli/admin/configs/common.py +17 -0
  40. kafka/cli/admin/configs/describe.py +30 -0
  41. kafka/cli/admin/configs/list.py +16 -0
  42. kafka/cli/admin/configs/reset.py +20 -0
  43. kafka/cli/admin/groups/__init__.py +16 -0
  44. kafka/cli/admin/groups/alter_offsets.py +30 -0
  45. kafka/cli/admin/groups/delete.py +11 -0
  46. kafka/cli/admin/groups/delete_offsets.py +29 -0
  47. kafka/cli/admin/groups/describe.py +11 -0
  48. kafka/cli/admin/groups/list.py +28 -0
  49. kafka/cli/admin/groups/list_offsets.py +29 -0
  50. kafka/cli/admin/groups/remove_members.py +40 -0
  51. kafka/cli/admin/groups/reset_offsets.py +139 -0
  52. kafka/cli/admin/partitions/__init__.py +21 -0
  53. kafka/cli/admin/partitions/alter_reassignments.py +37 -0
  54. kafka/cli/admin/partitions/create.py +27 -0
  55. kafka/cli/admin/partitions/delete_records.py +31 -0
  56. kafka/cli/admin/partitions/describe.py +36 -0
  57. kafka/cli/admin/partitions/elect_leaders.py +53 -0
  58. kafka/cli/admin/partitions/list_offsets.py +88 -0
  59. kafka/cli/admin/partitions/list_reassignments.py +35 -0
  60. kafka/cli/admin/topics/__init__.py +10 -0
  61. kafka/cli/admin/topics/create.py +13 -0
  62. kafka/cli/admin/topics/delete.py +19 -0
  63. kafka/cli/admin/topics/describe.py +18 -0
  64. kafka/cli/admin/topics/list.py +11 -0
  65. kafka/cli/admin/transactions/__init__.py +17 -0
  66. kafka/cli/admin/transactions/abort.py +38 -0
  67. kafka/cli/admin/transactions/describe.py +24 -0
  68. kafka/cli/admin/transactions/describe_producers.py +29 -0
  69. kafka/cli/admin/transactions/find_hanging.py +26 -0
  70. kafka/cli/admin/transactions/list.py +37 -0
  71. kafka/cli/admin/users/__init__.py +8 -0
  72. kafka/cli/admin/users/alter_user_scram_credentials.py +34 -0
  73. kafka/cli/admin/users/describe_user_scram_credentials.py +15 -0
  74. kafka/cli/common.py +95 -0
  75. kafka/cli/consumer/__init__.py +63 -0
  76. kafka/cli/producer/__init__.py +57 -0
  77. kafka/cluster.py +824 -0
  78. kafka/codec.py +325 -0
  79. kafka/consumer/__init__.py +5 -0
  80. kafka/consumer/__main__.py +5 -0
  81. kafka/consumer/fetcher.py +2012 -0
  82. kafka/consumer/group.py +1347 -0
  83. kafka/consumer/subscription_state.py +897 -0
  84. kafka/coordinator/__init__.py +0 -0
  85. kafka/coordinator/assignors/__init__.py +0 -0
  86. kafka/coordinator/assignors/abstract.py +90 -0
  87. kafka/coordinator/assignors/cooperative_sticky.py +167 -0
  88. kafka/coordinator/assignors/range.py +81 -0
  89. kafka/coordinator/assignors/roundrobin.py +101 -0
  90. kafka/coordinator/assignors/sticky/StickyAssignorUserData.json +37 -0
  91. kafka/coordinator/assignors/sticky/__init__.py +0 -0
  92. kafka/coordinator/assignors/sticky/partition_movements.py +149 -0
  93. kafka/coordinator/assignors/sticky/sorted_set.py +63 -0
  94. kafka/coordinator/assignors/sticky/sticky_assignor.py +665 -0
  95. kafka/coordinator/assignors/sticky/user_data.py +8 -0
  96. kafka/coordinator/base.py +1215 -0
  97. kafka/coordinator/consumer.py +1224 -0
  98. kafka/coordinator/heartbeat.py +82 -0
  99. kafka/coordinator/subscription.py +34 -0
  100. kafka/errors.py +1004 -0
  101. kafka/future.py +166 -0
  102. kafka/metrics/__init__.py +13 -0
  103. kafka/metrics/compound_stat.py +33 -0
  104. kafka/metrics/dict_reporter.py +81 -0
  105. kafka/metrics/kafka_metric.py +36 -0
  106. kafka/metrics/measurable.py +27 -0
  107. kafka/metrics/measurable_stat.py +13 -0
  108. kafka/metrics/metric_config.py +33 -0
  109. kafka/metrics/metric_name.py +105 -0
  110. kafka/metrics/metrics.py +261 -0
  111. kafka/metrics/metrics_reporter.py +53 -0
  112. kafka/metrics/quota.py +41 -0
  113. kafka/metrics/stat.py +19 -0
  114. kafka/metrics/stats/__init__.py +15 -0
  115. kafka/metrics/stats/avg.py +24 -0
  116. kafka/metrics/stats/count.py +17 -0
  117. kafka/metrics/stats/histogram.py +99 -0
  118. kafka/metrics/stats/max_stat.py +17 -0
  119. kafka/metrics/stats/min_stat.py +19 -0
  120. kafka/metrics/stats/percentile.py +14 -0
  121. kafka/metrics/stats/percentiles.py +75 -0
  122. kafka/metrics/stats/rate.py +118 -0
  123. kafka/metrics/stats/sampled_stat.py +99 -0
  124. kafka/metrics/stats/sensor.py +136 -0
  125. kafka/metrics/stats/total.py +15 -0
  126. kafka/net/__init__.py +19 -0
  127. kafka/net/compat.py +165 -0
  128. kafka/net/connection.py +593 -0
  129. kafka/net/http_connect.py +144 -0
  130. kafka/net/inet.py +122 -0
  131. kafka/net/manager.py +451 -0
  132. kafka/net/metrics.py +149 -0
  133. kafka/net/sasl/__init__.py +32 -0
  134. kafka/net/sasl/abc.py +28 -0
  135. kafka/net/sasl/gssapi.py +95 -0
  136. kafka/net/sasl/msk.py +245 -0
  137. kafka/net/sasl/oauth.py +98 -0
  138. kafka/net/sasl/plain.py +42 -0
  139. kafka/net/sasl/scram.py +135 -0
  140. kafka/net/sasl/sspi.py +111 -0
  141. kafka/net/selector.py +644 -0
  142. kafka/net/socks5.py +262 -0
  143. kafka/net/transport.py +415 -0
  144. kafka/net/wakeup_notifier.py +72 -0
  145. kafka/partitioner/__init__.py +8 -0
  146. kafka/partitioner/abc.py +8 -0
  147. kafka/partitioner/default.py +89 -0
  148. kafka/partitioner/sticky.py +109 -0
  149. kafka/producer/__init__.py +5 -0
  150. kafka/producer/__main__.py +5 -0
  151. kafka/producer/future.py +101 -0
  152. kafka/producer/kafka.py +1123 -0
  153. kafka/producer/producer_batch.py +192 -0
  154. kafka/producer/record_accumulator.py +647 -0
  155. kafka/producer/sender.py +884 -0
  156. kafka/producer/transaction_manager.py +1326 -0
  157. kafka/protocol/__init__.py +0 -0
  158. kafka/protocol/admin/__init__.py +29 -0
  159. kafka/protocol/admin/acl.py +83 -0
  160. kafka/protocol/admin/acl.pyi +375 -0
  161. kafka/protocol/admin/client_quotas.py +14 -0
  162. kafka/protocol/admin/client_quotas.pyi +265 -0
  163. kafka/protocol/admin/cluster.py +31 -0
  164. kafka/protocol/admin/cluster.pyi +620 -0
  165. kafka/protocol/admin/configs.py +22 -0
  166. kafka/protocol/admin/configs.pyi +437 -0
  167. kafka/protocol/admin/groups.py +24 -0
  168. kafka/protocol/admin/groups.pyi +261 -0
  169. kafka/protocol/admin/topics.py +53 -0
  170. kafka/protocol/admin/topics.pyi +982 -0
  171. kafka/protocol/admin/transactions.py +18 -0
  172. kafka/protocol/admin/transactions.pyi +311 -0
  173. kafka/protocol/admin/users.py +14 -0
  174. kafka/protocol/admin/users.pyi +223 -0
  175. kafka/protocol/api_data.py +125 -0
  176. kafka/protocol/api_header.py +55 -0
  177. kafka/protocol/api_key.py +97 -0
  178. kafka/protocol/api_message.py +277 -0
  179. kafka/protocol/broker_version_data.py +246 -0
  180. kafka/protocol/consumer/__init__.py +13 -0
  181. kafka/protocol/consumer/fetch.py +16 -0
  182. kafka/protocol/consumer/fetch.pyi +298 -0
  183. kafka/protocol/consumer/group.py +38 -0
  184. kafka/protocol/consumer/group.pyi +824 -0
  185. kafka/protocol/consumer/metadata.py +30 -0
  186. kafka/protocol/consumer/metadata.pyi +89 -0
  187. kafka/protocol/consumer/offsets.py +75 -0
  188. kafka/protocol/consumer/offsets.pyi +288 -0
  189. kafka/protocol/data_container.py +166 -0
  190. kafka/protocol/frame.py +30 -0
  191. kafka/protocol/generate_stubs.py +468 -0
  192. kafka/protocol/metadata/__init__.py +10 -0
  193. kafka/protocol/metadata/api_versions.py +41 -0
  194. kafka/protocol/metadata/api_versions.pyi +128 -0
  195. kafka/protocol/metadata/find_coordinator.py +19 -0
  196. kafka/protocol/metadata/find_coordinator.pyi +105 -0
  197. kafka/protocol/metadata/metadata.py +34 -0
  198. kafka/protocol/metadata/metadata.pyi +160 -0
  199. kafka/protocol/old/__init__.py +0 -0
  200. kafka/protocol/old/abstract.py +17 -0
  201. kafka/protocol/old/add_offsets_to_txn.py +54 -0
  202. kafka/protocol/old/add_partitions_to_txn.py +71 -0
  203. kafka/protocol/old/admin.py +1086 -0
  204. kafka/protocol/old/api.py +205 -0
  205. kafka/protocol/old/api_versions.py +133 -0
  206. kafka/protocol/old/commit.py +355 -0
  207. kafka/protocol/old/consumer_protocol.py +36 -0
  208. kafka/protocol/old/end_txn.py +53 -0
  209. kafka/protocol/old/fetch.py +408 -0
  210. kafka/protocol/old/find_coordinator.py +72 -0
  211. kafka/protocol/old/group.py +451 -0
  212. kafka/protocol/old/init_producer_id.py +42 -0
  213. kafka/protocol/old/list_offsets.py +186 -0
  214. kafka/protocol/old/metadata.py +290 -0
  215. kafka/protocol/old/offset_for_leader_epoch.py +133 -0
  216. kafka/protocol/old/produce.py +247 -0
  217. kafka/protocol/old/sasl_authenticate.py +38 -0
  218. kafka/protocol/old/sasl_handshake.py +39 -0
  219. kafka/protocol/old/struct.py +87 -0
  220. kafka/protocol/old/txn_offset_commit.py +73 -0
  221. kafka/protocol/old/types.py +440 -0
  222. kafka/protocol/parser.py +191 -0
  223. kafka/protocol/producer/__init__.py +7 -0
  224. kafka/protocol/producer/produce.py +17 -0
  225. kafka/protocol/producer/produce.pyi +197 -0
  226. kafka/protocol/producer/transaction.py +30 -0
  227. kafka/protocol/producer/transaction.pyi +663 -0
  228. kafka/protocol/sasl.py +52 -0
  229. kafka/protocol/sasl.pyi +126 -0
  230. kafka/protocol/schemas/__init__.py +7 -0
  231. kafka/protocol/schemas/fields/__init__.py +7 -0
  232. kafka/protocol/schemas/fields/array.py +127 -0
  233. kafka/protocol/schemas/fields/base.py +156 -0
  234. kafka/protocol/schemas/fields/codecs/__init__.py +12 -0
  235. kafka/protocol/schemas/fields/codecs/encode_buffer.py +82 -0
  236. kafka/protocol/schemas/fields/codecs/tagged_fields.py +109 -0
  237. kafka/protocol/schemas/fields/codecs/types.py +505 -0
  238. kafka/protocol/schemas/fields/codegen.py +40 -0
  239. kafka/protocol/schemas/fields/simple.py +127 -0
  240. kafka/protocol/schemas/fields/struct.py +357 -0
  241. kafka/protocol/schemas/fields/struct_array.py +142 -0
  242. kafka/protocol/schemas/load_json.py +42 -0
  243. kafka/protocol/schemas/resources/AddOffsetsToTxnRequest.json +40 -0
  244. kafka/protocol/schemas/resources/AddOffsetsToTxnResponse.json +35 -0
  245. kafka/protocol/schemas/resources/AddPartitionsToTxnRequest.json +65 -0
  246. kafka/protocol/schemas/resources/AddPartitionsToTxnResponse.json +60 -0
  247. kafka/protocol/schemas/resources/AlterClientQuotasRequest.json +47 -0
  248. kafka/protocol/schemas/resources/AlterClientQuotasResponse.json +41 -0
  249. kafka/protocol/schemas/resources/AlterConfigsRequest.json +43 -0
  250. kafka/protocol/schemas/resources/AlterConfigsResponse.json +39 -0
  251. kafka/protocol/schemas/resources/AlterPartitionReassignmentsRequest.json +42 -0
  252. kafka/protocol/schemas/resources/AlterPartitionReassignmentsResponse.json +47 -0
  253. kafka/protocol/schemas/resources/AlterReplicaLogDirsRequest.json +41 -0
  254. kafka/protocol/schemas/resources/AlterReplicaLogDirsResponse.json +41 -0
  255. kafka/protocol/schemas/resources/AlterUserScramCredentialsRequest.json +45 -0
  256. kafka/protocol/schemas/resources/AlterUserScramCredentialsResponse.json +35 -0
  257. kafka/protocol/schemas/resources/ApiVersionsRequest.json +34 -0
  258. kafka/protocol/schemas/resources/ApiVersionsResponse.json +79 -0
  259. kafka/protocol/schemas/resources/ConsumerProtocolAssignment.json +42 -0
  260. kafka/protocol/schemas/resources/ConsumerProtocolSubscription.json +49 -0
  261. kafka/protocol/schemas/resources/CreateAclsRequest.json +46 -0
  262. kafka/protocol/schemas/resources/CreateAclsResponse.json +37 -0
  263. kafka/protocol/schemas/resources/CreatePartitionsRequest.json +47 -0
  264. kafka/protocol/schemas/resources/CreatePartitionsResponse.json +41 -0
  265. kafka/protocol/schemas/resources/CreateTopicsRequest.json +65 -0
  266. kafka/protocol/schemas/resources/CreateTopicsResponse.json +72 -0
  267. kafka/protocol/schemas/resources/DeleteAclsRequest.json +46 -0
  268. kafka/protocol/schemas/resources/DeleteAclsResponse.json +59 -0
  269. kafka/protocol/schemas/resources/DeleteGroupsRequest.json +30 -0
  270. kafka/protocol/schemas/resources/DeleteGroupsResponse.json +36 -0
  271. kafka/protocol/schemas/resources/DeleteRecordsRequest.json +42 -0
  272. kafka/protocol/schemas/resources/DeleteRecordsResponse.json +43 -0
  273. kafka/protocol/schemas/resources/DeleteTopicsRequest.json +43 -0
  274. kafka/protocol/schemas/resources/DeleteTopicsResponse.json +52 -0
  275. kafka/protocol/schemas/resources/DescribeAclsRequest.json +43 -0
  276. kafka/protocol/schemas/resources/DescribeAclsResponse.json +55 -0
  277. kafka/protocol/schemas/resources/DescribeClientQuotasRequest.json +37 -0
  278. kafka/protocol/schemas/resources/DescribeClientQuotasResponse.json +47 -0
  279. kafka/protocol/schemas/resources/DescribeClusterRequest.json +35 -0
  280. kafka/protocol/schemas/resources/DescribeClusterResponse.json +56 -0
  281. kafka/protocol/schemas/resources/DescribeConfigsRequest.json +42 -0
  282. kafka/protocol/schemas/resources/DescribeConfigsResponse.json +69 -0
  283. kafka/protocol/schemas/resources/DescribeGroupsRequest.json +38 -0
  284. kafka/protocol/schemas/resources/DescribeGroupsResponse.json +74 -0
  285. kafka/protocol/schemas/resources/DescribeLogDirsRequest.json +38 -0
  286. kafka/protocol/schemas/resources/DescribeLogDirsResponse.json +65 -0
  287. kafka/protocol/schemas/resources/DescribeProducersRequest.json +32 -0
  288. kafka/protocol/schemas/resources/DescribeProducersResponse.json +55 -0
  289. kafka/protocol/schemas/resources/DescribeQuorumRequest.json +39 -0
  290. kafka/protocol/schemas/resources/DescribeQuorumResponse.json +82 -0
  291. kafka/protocol/schemas/resources/DescribeTopicPartitionsRequest.json +40 -0
  292. kafka/protocol/schemas/resources/DescribeTopicPartitionsResponse.json +66 -0
  293. kafka/protocol/schemas/resources/DescribeTransactionsRequest.json +27 -0
  294. kafka/protocol/schemas/resources/DescribeTransactionsResponse.json +52 -0
  295. kafka/protocol/schemas/resources/DescribeUserScramCredentialsRequest.json +30 -0
  296. kafka/protocol/schemas/resources/DescribeUserScramCredentialsResponse.json +45 -0
  297. kafka/protocol/schemas/resources/ElectLeadersRequest.json +41 -0
  298. kafka/protocol/schemas/resources/ElectLeadersResponse.json +45 -0
  299. kafka/protocol/schemas/resources/EndTxnRequest.json +43 -0
  300. kafka/protocol/schemas/resources/EndTxnResponse.json +41 -0
  301. kafka/protocol/schemas/resources/FetchRequest.json +125 -0
  302. kafka/protocol/schemas/resources/FetchResponse.json +124 -0
  303. kafka/protocol/schemas/resources/FindCoordinatorRequest.json +43 -0
  304. kafka/protocol/schemas/resources/FindCoordinatorResponse.json +58 -0
  305. kafka/protocol/schemas/resources/HeartbeatRequest.json +39 -0
  306. kafka/protocol/schemas/resources/HeartbeatResponse.json +35 -0
  307. kafka/protocol/schemas/resources/IncrementalAlterConfigsRequest.json +44 -0
  308. kafka/protocol/schemas/resources/IncrementalAlterConfigsResponse.json +38 -0
  309. kafka/protocol/schemas/resources/InitProducerIdRequest.json +50 -0
  310. kafka/protocol/schemas/resources/InitProducerIdResponse.json +47 -0
  311. kafka/protocol/schemas/resources/JoinGroupRequest.json +63 -0
  312. kafka/protocol/schemas/resources/JoinGroupResponse.json +69 -0
  313. kafka/protocol/schemas/resources/LeaveGroupRequest.json +47 -0
  314. kafka/protocol/schemas/resources/LeaveGroupResponse.json +47 -0
  315. kafka/protocol/schemas/resources/ListConfigResourcesRequest.json +31 -0
  316. kafka/protocol/schemas/resources/ListConfigResourcesResponse.json +37 -0
  317. kafka/protocol/schemas/resources/ListGroupsRequest.json +36 -0
  318. kafka/protocol/schemas/resources/ListGroupsResponse.json +49 -0
  319. kafka/protocol/schemas/resources/ListOffsetsRequest.json +72 -0
  320. kafka/protocol/schemas/resources/ListOffsetsResponse.json +71 -0
  321. kafka/protocol/schemas/resources/ListPartitionReassignmentsRequest.json +34 -0
  322. kafka/protocol/schemas/resources/ListPartitionReassignmentsResponse.json +46 -0
  323. kafka/protocol/schemas/resources/ListTransactionsRequest.json +40 -0
  324. kafka/protocol/schemas/resources/ListTransactionsResponse.json +42 -0
  325. kafka/protocol/schemas/resources/MetadataRequest.json +56 -0
  326. kafka/protocol/schemas/resources/MetadataResponse.json +101 -0
  327. kafka/protocol/schemas/resources/OffsetCommitRequest.json +76 -0
  328. kafka/protocol/schemas/resources/OffsetCommitResponse.json +71 -0
  329. kafka/protocol/schemas/resources/OffsetDeleteRequest.json +39 -0
  330. kafka/protocol/schemas/resources/OffsetDeleteResponse.json +42 -0
  331. kafka/protocol/schemas/resources/OffsetFetchRequest.json +76 -0
  332. kafka/protocol/schemas/resources/OffsetFetchResponse.json +107 -0
  333. kafka/protocol/schemas/resources/OffsetForLeaderEpochRequest.json +52 -0
  334. kafka/protocol/schemas/resources/OffsetForLeaderEpochResponse.json +51 -0
  335. kafka/protocol/schemas/resources/ProduceRequest.json +73 -0
  336. kafka/protocol/schemas/resources/ProduceResponse.json +96 -0
  337. kafka/protocol/schemas/resources/RequestHeader.json +44 -0
  338. kafka/protocol/schemas/resources/ResponseHeader.json +26 -0
  339. kafka/protocol/schemas/resources/SaslAuthenticateRequest.json +29 -0
  340. kafka/protocol/schemas/resources/SaslAuthenticateResponse.json +34 -0
  341. kafka/protocol/schemas/resources/SaslHandshakeRequest.json +31 -0
  342. kafka/protocol/schemas/resources/SaslHandshakeResponse.json +32 -0
  343. kafka/protocol/schemas/resources/SyncGroupRequest.json +56 -0
  344. kafka/protocol/schemas/resources/SyncGroupResponse.json +46 -0
  345. kafka/protocol/schemas/resources/TxnOffsetCommitRequest.json +68 -0
  346. kafka/protocol/schemas/resources/TxnOffsetCommitResponse.json +47 -0
  347. kafka/protocol/schemas/resources/UpdateFeaturesRequest.json +43 -0
  348. kafka/protocol/schemas/resources/UpdateFeaturesResponse.json +39 -0
  349. kafka/protocol/schemas/resources/WriteTxnMarkersRequest.json +49 -0
  350. kafka/protocol/schemas/resources/WriteTxnMarkersResponse.json +45 -0
  351. kafka/protocol/schemas/resources/__init__.py +0 -0
  352. kafka/record/__init__.py +3 -0
  353. kafka/record/_crc32c.py +161 -0
  354. kafka/record/abc.py +144 -0
  355. kafka/record/default_records.py +782 -0
  356. kafka/record/legacy_records.py +587 -0
  357. kafka/record/memory_records.py +255 -0
  358. kafka/record/util.py +135 -0
  359. kafka/serializer/__init__.py +4 -0
  360. kafka/serializer/abstract.py +20 -0
  361. kafka/serializer/default.py +16 -0
  362. kafka/serializer/json.py +17 -0
  363. kafka/serializer/wrapper.py +21 -0
  364. kafka/structs.py +69 -0
  365. kafka/util.py +159 -0
  366. kafka/vendor/__init__.py +0 -0
  367. kafka/version.py +1 -0
  368. kafka_python-3.0.0.dist-info/METADATA +319 -0
  369. kafka_python-3.0.0.dist-info/RECORD +373 -0
  370. kafka_python-3.0.0.dist-info/WHEEL +5 -0
  371. kafka_python-3.0.0.dist-info/entry_points.txt +2 -0
  372. kafka_python-3.0.0.dist-info/licenses/LICENSE +202 -0
  373. kafka_python-3.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,205 @@
1
+ from abc import ABC, abstractmethod, abstractproperty
2
+ from io import BytesIO
3
+ import weakref
4
+
5
+ from .struct import Struct
6
+ from .types import Int16, Int32, String, Schema, Array, TaggedFields
7
+
8
+
9
+ class ResponseClassRegistry:
10
+ _response_class_registry = {}
11
+
12
+ @classmethod
13
+ def register_response_class(cls, response_class):
14
+ cls._response_class_registry[(response_class.API_KEY, response_class.API_VERSION)] = response_class
15
+
16
+ @classmethod
17
+ def get_response_class(cls, header):
18
+ key = (header.api_key, header.api_version)
19
+ if key in cls._response_class_registry:
20
+ return cls._response_class_registry[key]
21
+
22
+
23
+ class RequestHeader(ResponseClassRegistry, Struct):
24
+ SCHEMA = Schema(
25
+ ('api_key', Int16),
26
+ ('api_version', Int16),
27
+ ('correlation_id', Int32),
28
+ ('client_id', String('utf-8'))
29
+ )
30
+
31
+ def get_response_class(self):
32
+ return ResponseClassRegistry.get_response_class(self)
33
+
34
+
35
+ class RequestHeaderV2(ResponseClassRegistry, Struct):
36
+ # Flexible response / request headers end in field buffer
37
+ SCHEMA = Schema(
38
+ ('api_key', Int16),
39
+ ('api_version', Int16),
40
+ ('correlation_id', Int32),
41
+ ('client_id', String('utf-8')),
42
+ ('tags', TaggedFields),
43
+ )
44
+
45
+ def get_response_class(self):
46
+ key = (self.api_key, self.api_version) # pylint: disable=E1101
47
+ if key in ResponseClassRegistry._response_class_registry:
48
+ return ResponseClassRegistry._response_class_registry[key]
49
+
50
+
51
+ class ResponseHeader(Struct):
52
+ SCHEMA = Schema(
53
+ ('correlation_id', Int32),
54
+ )
55
+
56
+
57
+ class ResponseHeaderV2(Struct):
58
+ SCHEMA = Schema(
59
+ ('correlation_id', Int32),
60
+ ('tags', TaggedFields),
61
+ )
62
+
63
+
64
+ class RequestResponse(Struct, ABC):
65
+ def __init__(self, *args, **kwargs):
66
+ super().__init__(*args, **kwargs)
67
+ self._header = None
68
+
69
+ @abstractproperty
70
+ def API_KEY(self):
71
+ """Integer identifier for api request"""
72
+ pass
73
+
74
+ @abstractproperty
75
+ def API_VERSION(self):
76
+ """Integer of api request version"""
77
+ pass
78
+
79
+ def to_object(self):
80
+ return _to_object(self.SCHEMA, self)
81
+
82
+ @classmethod
83
+ @abstractmethod
84
+ def is_request(cls):
85
+ pass
86
+
87
+ @property
88
+ def header(self):
89
+ return self._header
90
+
91
+ def with_header(self, correlation_id=0, client_id='kafka-python'):
92
+ if self.is_request():
93
+ kwargs = {
94
+ 'api_key': self.API_KEY,
95
+ 'api_version': self.API_VERSION,
96
+ 'correlation_id': correlation_id,
97
+ 'client_id': client_id,
98
+ }
99
+ else:
100
+ kwargs = {
101
+ 'correlation_id': correlation_id,
102
+ }
103
+ self._header = self.header_class()(**kwargs)
104
+
105
+ def encode(self, header=False, framed=False):
106
+ data = super().encode()
107
+ if not framed and not header:
108
+ return data
109
+ bits = [data]
110
+ if header:
111
+ bits.insert(0, self.header.encode())
112
+ if framed:
113
+ bits.insert(0, Int32.encode(sum(map(len, bits))))
114
+ return b''.join(bits)
115
+
116
+ @classmethod
117
+ @abstractmethod
118
+ def header_class(cls):
119
+ pass
120
+
121
+ @classmethod
122
+ def parse_header(cls, read_buffer):
123
+ return cls.header_class().decode(read_buffer)
124
+
125
+ @classmethod
126
+ def decode(cls, data, header=False, framed=False):
127
+ if not framed and not header:
128
+ return super().decode(data)
129
+ if isinstance(data, bytes):
130
+ data = BytesIO(data)
131
+ if framed:
132
+ size = Int32.decode(data)
133
+ if header:
134
+ hdr = cls.parse_header(data)
135
+ else:
136
+ hdr = None
137
+ ret = super().decode(data)
138
+ if hdr is not None:
139
+ ret._header = hdr
140
+ return ret
141
+
142
+ def __eq__(self, other):
143
+ return self._header == other._header and super().__eq__(other)
144
+
145
+
146
+ class Request(RequestResponse):
147
+ FLEXIBLE_VERSION = False
148
+
149
+ @classmethod
150
+ def is_request(cls):
151
+ return True
152
+
153
+ def expect_response(self):
154
+ """Override this method if an api request does not always generate a response"""
155
+ return True
156
+
157
+ @classmethod
158
+ def header_class(cls):
159
+ if cls.FLEXIBLE_VERSION:
160
+ return RequestHeaderV2
161
+ else:
162
+ return RequestHeader
163
+
164
+
165
+ class Response(RequestResponse):
166
+ FLEXIBLE_VERSION = False
167
+
168
+ def __init_subclass__(cls, **kwargs):
169
+ super().__init_subclass__(**kwargs)
170
+ ResponseClassRegistry.register_response_class(weakref.proxy(cls))
171
+
172
+ @classmethod
173
+ def is_request(cls):
174
+ return False
175
+
176
+ @classmethod
177
+ def header_class(cls):
178
+ if cls.FLEXIBLE_VERSION:
179
+ return ResponseHeaderV2
180
+ else:
181
+ return ResponseHeader
182
+
183
+
184
+ def _to_object(schema, data):
185
+ obj = {}
186
+ for idx, (name, _type) in enumerate(zip(schema.names, schema.fields)):
187
+ if isinstance(data, Struct):
188
+ val = data.get_item(name)
189
+ else:
190
+ val = data[idx]
191
+
192
+ if isinstance(_type, Schema):
193
+ obj[name] = _to_object(_type, val)
194
+ elif isinstance(_type, Array):
195
+ if isinstance(_type.array_of, (Array, Schema)):
196
+ obj[name] = [
197
+ _to_object(_type.array_of, x)
198
+ for x in val
199
+ ]
200
+ else:
201
+ obj[name] = val
202
+ else:
203
+ obj[name] = val
204
+
205
+ return obj
@@ -0,0 +1,133 @@
1
+ from io import BytesIO
2
+
3
+ from .api import Request, Response
4
+ from .types import Array, CompactArray, CompactString, Int16, Int32, Schema, TaggedFields
5
+
6
+
7
+ class BaseApiVersionsResponse(Response):
8
+ API_KEY = 18
9
+ API_VERSION = 0
10
+ SCHEMA = Schema(
11
+ ('error_code', Int16),
12
+ ('api_keys', Array(
13
+ ('api_key', Int16),
14
+ ('min_version', Int16),
15
+ ('max_version', Int16)))
16
+ )
17
+ ALIASES = {'api_versions': 'api_keys'}
18
+
19
+ @classmethod
20
+ def decode(cls, data, header=False, framed=False):
21
+ if isinstance(data, bytes):
22
+ data = BytesIO(data)
23
+ # Check error_code, decode as v0 if any error
24
+ curr = data.tell()
25
+ if framed:
26
+ nbytes = Int32.decode(data)
27
+ if header:
28
+ cls.parse_header(data) # Note: non-flexible header
29
+ err = Int16.decode(data)
30
+ data.seek(curr)
31
+ if err != 0:
32
+ return ApiVersionsResponse_v0.decode(data, header=header, framed=framed)
33
+ return super().decode(data, header=header, framed=framed)
34
+
35
+
36
+ class ApiVersionsResponse_v0(Response):
37
+ API_KEY = 18
38
+ API_VERSION = 0
39
+ SCHEMA = Schema(
40
+ ('error_code', Int16),
41
+ ('api_keys', Array(
42
+ ('api_key', Int16),
43
+ ('min_version', Int16),
44
+ ('max_version', Int16)))
45
+ )
46
+ ALIASES = {'api_versions': 'api_keys'}
47
+
48
+
49
+ class ApiVersionsResponse_v1(BaseApiVersionsResponse):
50
+ API_KEY = 18
51
+ API_VERSION = 1
52
+ SCHEMA = Schema(
53
+ ('error_code', Int16),
54
+ ('api_keys', Array(
55
+ ('api_key', Int16),
56
+ ('min_version', Int16),
57
+ ('max_version', Int16))),
58
+ ('throttle_time_ms', Int32)
59
+ )
60
+
61
+
62
+ class ApiVersionsResponse_v2(BaseApiVersionsResponse):
63
+ API_KEY = 18
64
+ API_VERSION = 2
65
+ SCHEMA = ApiVersionsResponse_v1.SCHEMA
66
+
67
+
68
+ class ApiVersionsResponse_v3(BaseApiVersionsResponse):
69
+ API_KEY = 18
70
+ API_VERSION = 3
71
+ SCHEMA = Schema(
72
+ ('error_code', Int16),
73
+ ('api_keys', CompactArray(
74
+ ('api_key', Int16),
75
+ ('min_version', Int16),
76
+ ('max_version', Int16),
77
+ ('tags', TaggedFields))),
78
+ ('throttle_time_ms', Int32),
79
+ ('tags', TaggedFields)
80
+ )
81
+ # Note: ApiVersions Response does not send FLEXIBLE_VERSION header!
82
+
83
+
84
+ class ApiVersionsResponse_v4(BaseApiVersionsResponse):
85
+ API_KEY = 18
86
+ API_VERSION = 4
87
+ SCHEMA = ApiVersionsResponse_v3.SCHEMA
88
+
89
+
90
+ class ApiVersionsRequest_v0(Request):
91
+ API_KEY = 18
92
+ API_VERSION = 0
93
+ SCHEMA = Schema()
94
+
95
+
96
+ class ApiVersionsRequest_v1(Request):
97
+ API_KEY = 18
98
+ API_VERSION = 1
99
+ SCHEMA = ApiVersionsRequest_v0.SCHEMA
100
+
101
+
102
+ class ApiVersionsRequest_v2(Request):
103
+ API_KEY = 18
104
+ API_VERSION = 2
105
+ SCHEMA = ApiVersionsRequest_v1.SCHEMA
106
+
107
+
108
+ class ApiVersionsRequest_v3(Request):
109
+ API_KEY = 18
110
+ API_VERSION = 3
111
+ SCHEMA = Schema(
112
+ ('client_software_name', CompactString('utf-8')),
113
+ ('client_software_version', CompactString('utf-8')),
114
+ ('tags', TaggedFields)
115
+ )
116
+ FLEXIBLE_VERSION = True
117
+
118
+
119
+ class ApiVersionsRequest_v4(Request):
120
+ API_KEY = 18
121
+ API_VERSION = 4
122
+ SCHEMA = ApiVersionsRequest_v3.SCHEMA
123
+ FLEXIBLE_VERSION = True
124
+
125
+
126
+ ApiVersionsRequest = [
127
+ ApiVersionsRequest_v0, ApiVersionsRequest_v1, ApiVersionsRequest_v2,
128
+ ApiVersionsRequest_v3, ApiVersionsRequest_v4,
129
+ ]
130
+ ApiVersionsResponse = [
131
+ ApiVersionsResponse_v0, ApiVersionsResponse_v1, ApiVersionsResponse_v2,
132
+ ApiVersionsResponse_v3, ApiVersionsResponse_v4,
133
+ ]
@@ -0,0 +1,355 @@
1
+ from .api import Request, Response
2
+ from .types import Array, Int16, Int32, Int64, Schema, String
3
+
4
+
5
+ class OffsetCommitResponse_v0(Response):
6
+ API_KEY = 8
7
+ API_VERSION = 0
8
+ SCHEMA = Schema(
9
+ ('topics', Array(
10
+ ('name', String('utf-8')),
11
+ ('partitions', Array(
12
+ ('partition_index', Int32),
13
+ ('error_code', Int16)))))
14
+ )
15
+
16
+
17
+ class OffsetCommitResponse_v1(Response):
18
+ API_KEY = 8
19
+ API_VERSION = 1
20
+ SCHEMA = OffsetCommitResponse_v0.SCHEMA
21
+
22
+
23
+ class OffsetCommitResponse_v2(Response):
24
+ API_KEY = 8
25
+ API_VERSION = 2
26
+ SCHEMA = OffsetCommitResponse_v1.SCHEMA
27
+
28
+
29
+ class OffsetCommitResponse_v3(Response):
30
+ API_KEY = 8
31
+ API_VERSION = 3
32
+ SCHEMA = Schema(
33
+ ('throttle_time_ms', Int32),
34
+ ('topics', Array(
35
+ ('name', String('utf-8')),
36
+ ('partitions', Array(
37
+ ('partition_index', Int32),
38
+ ('error_code', Int16)))))
39
+ )
40
+
41
+
42
+ class OffsetCommitResponse_v4(Response):
43
+ API_KEY = 8
44
+ API_VERSION = 4
45
+ SCHEMA = OffsetCommitResponse_v3.SCHEMA
46
+
47
+
48
+ class OffsetCommitResponse_v5(Response):
49
+ API_KEY = 8
50
+ API_VERSION = 5
51
+ SCHEMA = OffsetCommitResponse_v4.SCHEMA
52
+
53
+
54
+ class OffsetCommitResponse_v6(Response):
55
+ API_KEY = 8
56
+ API_VERSION = 6
57
+ SCHEMA = OffsetCommitResponse_v5.SCHEMA
58
+
59
+
60
+ class OffsetCommitResponse_v7(Response):
61
+ API_KEY = 8
62
+ API_VERSION = 7
63
+ SCHEMA = OffsetCommitResponse_v6.SCHEMA
64
+
65
+
66
+ class OffsetCommitRequest_v0(Request):
67
+ API_KEY = 8
68
+ API_VERSION = 0 # Zookeeper-backed storage
69
+ SCHEMA = Schema(
70
+ ('group_id', String('utf-8')),
71
+ ('topics', Array(
72
+ ('name', String('utf-8')),
73
+ ('partitions', Array(
74
+ ('partition_index', Int32),
75
+ ('committed_offset', Int64),
76
+ ('committed_metadata', String('utf-8'))))))
77
+ )
78
+ ALIASES = {
79
+ 'consumer_group': 'group_id',
80
+ }
81
+
82
+
83
+ class OffsetCommitRequest_v1(Request):
84
+ API_KEY = 8
85
+ API_VERSION = 1 # Kafka-backed storage
86
+ SCHEMA = Schema(
87
+ ('group_id', String('utf-8')),
88
+ ('generation_id_or_member_epoch', Int32),
89
+ ('member_id', String('utf-8')),
90
+ ('topics', Array(
91
+ ('name', String('utf-8')),
92
+ ('partitions', Array(
93
+ ('partition_index', Int32),
94
+ ('committed_offset', Int64),
95
+ ('commit_timestamp', Int64),
96
+ ('committed_metadata', String('utf-8'))))))
97
+ )
98
+ ALIASES = {
99
+ 'consumer_group': 'group_id',
100
+ 'consumer_group_generation_id': 'generation_id_or_member_epoch',
101
+ 'consumer_id': 'member_id',
102
+ }
103
+
104
+
105
+ class OffsetCommitRequest_v2(Request):
106
+ API_KEY = 8
107
+ API_VERSION = 2
108
+ SCHEMA = Schema(
109
+ ('group_id', String('utf-8')),
110
+ ('generation_id_or_member_epoch', Int32),
111
+ ('member_id', String('utf-8')),
112
+ ('retention_time_ms', Int64), # added retention_time_ms, dropped timestamp
113
+ ('topics', Array(
114
+ ('name', String('utf-8')),
115
+ ('partitions', Array(
116
+ ('partition_index', Int32),
117
+ ('committed_offset', Int64),
118
+ ('committed_metadata', String('utf-8'))))))
119
+ )
120
+ DEFAULT_RETENTION_TIME = -1
121
+ ALIASES = {
122
+ 'consumer_group': 'group_id',
123
+ 'consumer_group_generation_id': 'generation_id_or_member_epoch',
124
+ 'consumer_id': 'member_id',
125
+ 'retention_time': 'retention_time_ms',
126
+ }
127
+
128
+
129
+ class OffsetCommitRequest_v3(Request):
130
+ API_KEY = 8
131
+ API_VERSION = 3
132
+ SCHEMA = OffsetCommitRequest_v2.SCHEMA
133
+ DEFAULT_RETENTION_TIME = -1
134
+ ALIASES = OffsetCommitRequest_v2.ALIASES
135
+
136
+
137
+ class OffsetCommitRequest_v4(Request):
138
+ API_KEY = 8
139
+ API_VERSION = 4
140
+ SCHEMA = OffsetCommitRequest_v3.SCHEMA
141
+ DEFAULT_RETENTION_TIME = -1
142
+ ALIASES = OffsetCommitRequest_v3.ALIASES
143
+
144
+
145
+ class OffsetCommitRequest_v5(Request):
146
+ API_KEY = 8
147
+ API_VERSION = 5 # drops retention_time
148
+ SCHEMA = Schema(
149
+ ('group_id', String('utf-8')),
150
+ ('generation_id_or_member_epoch', Int32),
151
+ ('member_id', String('utf-8')),
152
+ ('topics', Array(
153
+ ('name', String('utf-8')),
154
+ ('partitions', Array(
155
+ ('partition_index', Int32),
156
+ ('committed_offset', Int64),
157
+ ('committed_metadata', String('utf-8'))))))
158
+ )
159
+ ALIASES = {
160
+ 'consumer_group': 'group_id',
161
+ 'consumer_group_generation_id': 'generation_id_or_member_epoch',
162
+ 'consumer_id': 'member_id',
163
+ }
164
+
165
+
166
+ class OffsetCommitRequest_v6(Request):
167
+ API_KEY = 8
168
+ API_VERSION = 6
169
+ SCHEMA = Schema(
170
+ ('group_id', String('utf-8')),
171
+ ('generation_id_or_member_epoch', Int32),
172
+ ('member_id', String('utf-8')),
173
+ ('topics', Array(
174
+ ('name', String('utf-8')),
175
+ ('partitions', Array(
176
+ ('partition_index', Int32),
177
+ ('committed_offset', Int64),
178
+ ('committed_leader_epoch', Int32), # added for fencing / kip-320. default -1
179
+ ('committed_metadata', String('utf-8'))))))
180
+ )
181
+ ALIASES = OffsetCommitRequest_v5.ALIASES
182
+
183
+
184
+ class OffsetCommitRequest_v7(Request):
185
+ API_KEY = 8
186
+ API_VERSION = 7
187
+ SCHEMA = Schema(
188
+ ('group_id', String('utf-8')),
189
+ ('generation_id_or_member_epoch', Int32),
190
+ ('member_id', String('utf-8')),
191
+ ('group_instance_id', String('utf-8')), # added for static membership / kip-345
192
+ ('topics', Array(
193
+ ('name', String('utf-8')),
194
+ ('partitions', Array(
195
+ ('partition_index', Int32),
196
+ ('committed_offset', Int64),
197
+ ('committed_leader_epoch', Int32),
198
+ ('committed_metadata', String('utf-8'))))))
199
+ )
200
+ ALIASES = {
201
+ 'consumer_group': 'group_id',
202
+ 'generation_id': 'generation_id_or_member_epoch',
203
+ 'consumer_id': 'member_id',
204
+ }
205
+
206
+
207
+ OffsetCommitRequest = [
208
+ OffsetCommitRequest_v0, OffsetCommitRequest_v1, OffsetCommitRequest_v2,
209
+ OffsetCommitRequest_v3, OffsetCommitRequest_v4, OffsetCommitRequest_v5,
210
+ OffsetCommitRequest_v6, OffsetCommitRequest_v7,
211
+ ]
212
+ OffsetCommitResponse = [
213
+ OffsetCommitResponse_v0, OffsetCommitResponse_v1, OffsetCommitResponse_v2,
214
+ OffsetCommitResponse_v3, OffsetCommitResponse_v4, OffsetCommitResponse_v5,
215
+ OffsetCommitResponse_v6, OffsetCommitResponse_v7,
216
+ ]
217
+
218
+
219
+ class OffsetFetchResponse_v0(Response):
220
+ API_KEY = 9
221
+ API_VERSION = 0
222
+ SCHEMA = Schema(
223
+ ('topics', Array(
224
+ ('name', String('utf-8')),
225
+ ('partitions', Array(
226
+ ('partition_index', Int32),
227
+ ('committed_offset', Int64),
228
+ ('metadata', String('utf-8')),
229
+ ('error_code', Int16)))))
230
+ )
231
+
232
+
233
+ class OffsetFetchResponse_v1(Response):
234
+ API_KEY = 9
235
+ API_VERSION = 1
236
+ SCHEMA = OffsetFetchResponse_v0.SCHEMA
237
+
238
+
239
+ class OffsetFetchResponse_v2(Response):
240
+ # Added in KIP-88
241
+ API_KEY = 9
242
+ API_VERSION = 2
243
+ SCHEMA = Schema(
244
+ ('topics', Array(
245
+ ('name', String('utf-8')),
246
+ ('partitions', Array(
247
+ ('partition_index', Int32),
248
+ ('committed_offset', Int64),
249
+ ('metadata', String('utf-8')),
250
+ ('error_code', Int16))))),
251
+ ('error_code', Int16)
252
+ )
253
+
254
+
255
+ class OffsetFetchResponse_v3(Response):
256
+ API_KEY = 9
257
+ API_VERSION = 3
258
+ SCHEMA = Schema(
259
+ ('throttle_time_ms', Int32),
260
+ ('topics', Array(
261
+ ('name', String('utf-8')),
262
+ ('partitions', Array(
263
+ ('partition_index', Int32),
264
+ ('committed_offset', Int64),
265
+ ('metadata', String('utf-8')),
266
+ ('error_code', Int16))))),
267
+ ('error_code', Int16)
268
+ )
269
+
270
+
271
+ class OffsetFetchResponse_v4(Response):
272
+ API_KEY = 9
273
+ API_VERSION = 4
274
+ SCHEMA = OffsetFetchResponse_v3.SCHEMA
275
+
276
+
277
+ class OffsetFetchResponse_v5(Response):
278
+ API_KEY = 9
279
+ API_VERSION = 5
280
+ SCHEMA = Schema(
281
+ ('throttle_time_ms', Int32),
282
+ ('topics', Array(
283
+ ('name', String('utf-8')),
284
+ ('partitions', Array(
285
+ ('partition_index', Int32),
286
+ ('committed_offset', Int64),
287
+ ('committed_leader_epoch', Int32),
288
+ ('metadata', String('utf-8')),
289
+ ('error_code', Int16))))),
290
+ ('error_code', Int16)
291
+ )
292
+
293
+
294
+ class OffsetFetchRequest_v0(Request):
295
+ API_KEY = 9
296
+ API_VERSION = 0 # zookeeper-backed storage
297
+ SCHEMA = Schema(
298
+ ('group_id', String('utf-8')),
299
+ ('topics', Array(
300
+ ('name', String('utf-8')),
301
+ ('partition_indexes', Array(Int32))))
302
+ )
303
+ ALIASES = {
304
+ 'consumer_group': 'group_id',
305
+ }
306
+
307
+
308
+ class OffsetFetchRequest_v1(Request):
309
+ API_KEY = 9
310
+ API_VERSION = 1 # kafka-backed storage
311
+ SCHEMA = OffsetFetchRequest_v0.SCHEMA
312
+ ALIASES = OffsetFetchRequest_v0.ALIASES
313
+
314
+
315
+ class OffsetFetchRequest_v2(Request):
316
+ # KIP-88: Allows passing null topics to return offsets for all partitions
317
+ # that the consumer group has a stored offset for, even if no consumer in
318
+ # the group is currently consuming that partition.
319
+ API_KEY = 9
320
+ API_VERSION = 2
321
+ SCHEMA = OffsetFetchRequest_v1.SCHEMA
322
+ ALIASES = OffsetFetchRequest_v1.ALIASES
323
+
324
+
325
+ class OffsetFetchRequest_v3(Request):
326
+ API_KEY = 9
327
+ API_VERSION = 3
328
+ SCHEMA = OffsetFetchRequest_v2.SCHEMA
329
+ ALIASES = OffsetFetchRequest_v2.ALIASES
330
+
331
+
332
+ class OffsetFetchRequest_v4(Request):
333
+ API_KEY = 9
334
+ API_VERSION = 4
335
+ SCHEMA = OffsetFetchRequest_v3.SCHEMA
336
+ ALIASES = OffsetFetchRequest_v3.ALIASES
337
+
338
+
339
+ class OffsetFetchRequest_v5(Request):
340
+ API_KEY = 9
341
+ API_VERSION = 5
342
+ SCHEMA = OffsetFetchRequest_v4.SCHEMA
343
+ ALIASES = OffsetFetchRequest_v4.ALIASES
344
+
345
+
346
+ OffsetFetchRequest = [
347
+ OffsetFetchRequest_v0, OffsetFetchRequest_v1,
348
+ OffsetFetchRequest_v2, OffsetFetchRequest_v3,
349
+ OffsetFetchRequest_v4, OffsetFetchRequest_v5,
350
+ ]
351
+ OffsetFetchResponse = [
352
+ OffsetFetchResponse_v0, OffsetFetchResponse_v1,
353
+ OffsetFetchResponse_v2, OffsetFetchResponse_v3,
354
+ OffsetFetchResponse_v4, OffsetFetchResponse_v5,
355
+ ]