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,26 @@
1
+ class FindHangingTransactions:
2
+ COMMAND = 'find-hanging'
3
+ HELP = 'Find transactions older than the broker timeout + 5 min'
4
+
5
+ @classmethod
6
+ def add_arguments(cls, parser):
7
+ parser.add_argument(
8
+ '--broker-id', type=int, action='append', dest='broker_ids',
9
+ help='Query only these brokers (repeatable). Default: all.')
10
+ parser.add_argument(
11
+ '--max-transaction-timeout-ms', type=int, default=900_000,
12
+ help="Broker's max-transaction-timeout (ms). "
13
+ 'Transactions older than this + 5 min are flagged as hanging. '
14
+ 'Default: 900000 (Kafka default).')
15
+
16
+ @classmethod
17
+ def command(cls, client, args):
18
+ results = client.find_hanging_transactions(
19
+ broker_ids=args.broker_ids,
20
+ max_transaction_timeout_ms=args.max_transaction_timeout_ms,
21
+ )
22
+ for row in results:
23
+ row['topic_partitions'] = [
24
+ {'topic': tp.topic, 'partition': tp.partition}
25
+ for tp in row['topic_partitions']]
26
+ return results
@@ -0,0 +1,37 @@
1
+ class ListTransactions:
2
+ COMMAND = 'list'
3
+ HELP = 'List transactions across all brokers (broker >= 3.0)'
4
+
5
+ @classmethod
6
+ def add_arguments(cls, parser):
7
+ parser.add_argument(
8
+ '--broker-id', type=int, action='append', dest='broker_ids',
9
+ help='Query only these brokers (repeatable). Default: all brokers.')
10
+ parser.add_argument(
11
+ '--producer-id', type=int, action='append', dest='producer_id_filters',
12
+ help='Only list transactions for these producer ids (repeatable).')
13
+ parser.add_argument(
14
+ '--state', type=str, action='append', dest='state_filters',
15
+ help='Only list transactions in these states (repeatable). '
16
+ 'Valid values: Empty, Ongoing, PrepareCommit, PrepareAbort, '
17
+ 'CompleteCommit, CompleteAbort, Dead, PrepareEpochFence.')
18
+ parser.add_argument(
19
+ '--duration-filter-ms', type=int, default=None,
20
+ help='Only list transactions running longer than this. '
21
+ 'Requires broker >= 3.8 (ListTransactions v1+).')
22
+ parser.add_argument(
23
+ '--id-pattern', type=str, default=None, dest='transactional_id_pattern',
24
+ help='Only list transactions whose id matches this regex. '
25
+ 'Requires broker >= 4.1 (KIP-1152).')
26
+
27
+ @classmethod
28
+ def command(cls, client, args):
29
+ results = client.list_transactions(
30
+ broker_ids=args.broker_ids,
31
+ producer_id_filters=args.producer_id_filters,
32
+ state_filters=args.state_filters,
33
+ duration_filter_ms=args.duration_filter_ms,
34
+ transactional_id_pattern=args.transactional_id_pattern,
35
+ )
36
+ return {broker_id: [t._asdict() for t in listings]
37
+ for broker_id, listings in results.items()}
@@ -0,0 +1,8 @@
1
+ from .alter_user_scram_credentials import AlterUserScramCredentials
2
+ from .describe_user_scram_credentials import DescribeUserScramCredentials
3
+
4
+
5
+ class UsersCommandGroup:
6
+ GROUP = 'users'
7
+ HELP = 'Manage Kafka Users'
8
+ COMMANDS = [DescribeUserScramCredentials, AlterUserScramCredentials]
@@ -0,0 +1,34 @@
1
+ from kafka.admin import (
2
+ ScramMechanism,
3
+ UserScramCredentialDeletion,
4
+ UserScramCredentialUpsertion,
5
+ )
6
+
7
+
8
+ class AlterUserScramCredentials:
9
+ COMMAND = 'alter-scram-credentials'
10
+ HELP = 'Alter SCRAM credentials for Kafka users'
11
+
12
+ @classmethod
13
+ def add_arguments(cls, parser):
14
+ parser.add_argument(
15
+ '--delete', type=str, action='append', dest='deletions', default=[],
16
+ help='USER:MECHANISM pair to delete (e.g. alice:SCRAM-SHA-256)')
17
+ parser.add_argument(
18
+ '--upsert', type=str, action='append', dest='upsertions', default=[],
19
+ help='USER:MECHANISM:PASSWORD triple to insert or update')
20
+ parser.add_argument(
21
+ '--iterations', type=int, default=None,
22
+ help='PBKDF2 iteration count for upsertions (default: 4096)')
23
+
24
+ @classmethod
25
+ def command(cls, client, args):
26
+ alterations = []
27
+ for spec in args.deletions:
28
+ user, mechanism = spec.split(':', 1)
29
+ alterations.append(UserScramCredentialDeletion(user, mechanism))
30
+ for spec in args.upsertions:
31
+ user, mechanism, password = spec.split(':', 2)
32
+ alterations.append(UserScramCredentialUpsertion(
33
+ user, mechanism, password, iterations=args.iterations))
34
+ return client.alter_user_scram_credentials(alterations)
@@ -0,0 +1,15 @@
1
+ class DescribeUserScramCredentials:
2
+ COMMAND = 'describe-scram-credentials'
3
+ HELP = 'Describe SCRAM credentials for Kafka users'
4
+
5
+ @classmethod
6
+ def add_arguments(cls, parser):
7
+ parser.add_argument(
8
+ '--user', type=str, action='append', dest='users', default=[],
9
+ help='User name to describe (repeatable). '
10
+ 'If omitted, describes all users.')
11
+
12
+ @classmethod
13
+ def command(cls, client, args):
14
+ users = args.users if args.users else None
15
+ return client.describe_user_scram_credentials(users)
kafka/cli/common.py ADDED
@@ -0,0 +1,95 @@
1
+ import logging
2
+
3
+
4
+ def add_connect_cli_args(parser, bootstrap_required=True):
5
+ connect_group = parser.add_argument_group('connection')
6
+ connect_group.add_argument(
7
+ '-b', '--bootstrap-servers', type=str, action='append', required=bootstrap_required,
8
+ help='host:port for cluster bootstrap server. Can be provided multiple times.')
9
+ connect_group.add_argument(
10
+ '-S', '--security-protocol', type=str, default='PLAINTEXT', help='PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL')
11
+ connect_group.add_argument(
12
+ '-M', '--sasl-mechanism', type=str, default='PLAIN', help='PLAIN, GSSAPI, OAUTHBEARER, SCRAM-SHA-256, SCRAM-SHA-512')
13
+ connect_group.add_argument(
14
+ '-U', '--sasl-user', type=str)
15
+ connect_group.add_argument(
16
+ '-P', '--sasl-password', type=str)
17
+
18
+
19
+ def build_kwargs(props):
20
+ kwargs = {}
21
+ for prop in props or []:
22
+ k, v = prop.split('=')
23
+ try:
24
+ v = int(v)
25
+ except ValueError:
26
+ pass
27
+ if v == 'None':
28
+ v = None
29
+ elif v == 'False':
30
+ v = False
31
+ elif v == 'True':
32
+ v = True
33
+ kwargs[k] = v
34
+ return kwargs
35
+
36
+
37
+ def build_connect_kwargs(config):
38
+ if not config.bootstrap_servers:
39
+ raise ValueError('python -m kafka: error: the following arguments are required: -b/--bootstrap-servers')
40
+ kwargs = build_kwargs(config.extra_config)
41
+ kwargs.update({
42
+ 'bootstrap_servers': config.bootstrap_servers,
43
+ 'security_protocol': config.security_protocol,
44
+ 'sasl_mechanism': config.sasl_mechanism,
45
+ 'sasl_plain_username': config.sasl_user,
46
+ 'sasl_plain_password': config.sasl_password,
47
+ })
48
+ return kwargs
49
+
50
+
51
+ def add_logging_cli_args(parser):
52
+ logging_group = parser.add_argument_group('logging')
53
+ logging_group.add_argument(
54
+ '-l', '--log-level', type=str, default='CRITICAL',
55
+ help='logging level, passed to logging.basicConfig')
56
+ logging_group.add_argument(
57
+ '-L', '--enable-logger', type=str, action='append',
58
+ help='enable a specific logger. Can be provided multiple times. If not provided, all loggers are enabled')
59
+ logging_group.add_argument(
60
+ '-D', '--disable-logger', type=str, action='append',
61
+ help='disable a specific logger. Can be provided multiple times.')
62
+ extended_group = parser.add_argument_group('extended')
63
+ extended_group.add_argument(
64
+ '-C', '--extra-config', type=str, action='append',
65
+ help='additional configuration properties for client in "key=val" format. Can be provided multiple times.')
66
+
67
+
68
+ def configure_logging(config):
69
+ _LOGGING_LEVELS = {
70
+ 'NOTSET': 0,
71
+ 'DEBUG': 10,
72
+ 'INFO': 20,
73
+ 'WARNING': 30,
74
+ 'ERROR': 40,
75
+ 'CRITICAL': 50,
76
+ }
77
+ if config.enable_logger is not None:
78
+ log_level = _LOGGING_LEVELS[config.log_level.upper()]
79
+ handler = logging.StreamHandler()
80
+ handler.setLevel(log_level)
81
+ handler.setFormatter(logging.Formatter(logging.BASIC_FORMAT))
82
+ for name in config.enable_logger:
83
+ logger = logging.getLogger(name)
84
+ logger.setLevel(log_level)
85
+ logger.addHandler(handler)
86
+ else:
87
+ logging.basicConfig(level=_LOGGING_LEVELS[config.log_level.upper()])
88
+ if config.disable_logger is not None:
89
+ for name in config.disable_logger:
90
+ logging.getLogger(name).setLevel(logging.CRITICAL + 1)
91
+
92
+
93
+ def add_common_cli_args(parser, bootstrap_required=True):
94
+ add_connect_cli_args(parser, bootstrap_required)
95
+ add_logging_cli_args(parser)
@@ -0,0 +1,63 @@
1
+ import argparse
2
+ import logging
3
+
4
+ from kafka import KafkaConsumer
5
+ from kafka.errors import KafkaError
6
+ from ..common import add_common_cli_args, configure_logging, build_connect_kwargs
7
+
8
+
9
+ def main_parser(prog=None):
10
+ parser = argparse.ArgumentParser(
11
+ prog=prog or 'python -m kafka.consumer',
12
+ description='Kafka console consumer',
13
+ )
14
+ add_common_cli_args(parser)
15
+ options = parser.add_argument_group('consumer options')
16
+ options.add_argument(
17
+ '-t', '--topic', type=str, action='append', dest='topics', required=True,
18
+ help='subscribe to topic')
19
+ options.add_argument(
20
+ '-g', '--group', type=str,
21
+ help='consumer group')
22
+ options.add_argument(
23
+ '-i', '--group-instance-id', type=str,
24
+ help='static group membership identifier')
25
+ options.add_argument(
26
+ '-f', '--format', type=str, default='str',
27
+ help='output format: str|raw|full')
28
+ options.add_argument(
29
+ '--encoding', type=str, default='utf-8', help='encoding to use for str output decode()')
30
+ return parser
31
+
32
+
33
+ def run_cli(args=None, prog=None):
34
+ parser = main_parser(prog=prog)
35
+ config = parser.parse_args(args)
36
+
37
+ if config.format not in ('str', 'raw', 'full'):
38
+ raise ValueError('Unrecognized format: %s' % config.format)
39
+ configure_logging(config)
40
+ logger = logging.getLogger(__name__)
41
+
42
+ kwargs = build_connect_kwargs(config)
43
+ consumer = KafkaConsumer(
44
+ group_id=config.group,
45
+ group_instance_id=config.group_instance_id,
46
+ **kwargs)
47
+ consumer.subscribe(config.topics)
48
+ try:
49
+ for m in consumer:
50
+ if config.format == 'str':
51
+ print(m.value.decode(config.encoding))
52
+ elif config.format == 'full':
53
+ print(m)
54
+ else:
55
+ print(m.value)
56
+ except KeyboardInterrupt:
57
+ logger.info('Bye!')
58
+ return 0
59
+ except Exception:
60
+ logger.critical('Error!', exc_info=True)
61
+ return 1
62
+ finally:
63
+ consumer.close()
@@ -0,0 +1,57 @@
1
+ import argparse
2
+ import logging
3
+ import sys
4
+
5
+ from kafka import KafkaProducer
6
+ from ..common import add_common_cli_args, configure_logging, build_connect_kwargs
7
+
8
+
9
+ def main_parser(prog=None):
10
+ parser = argparse.ArgumentParser(
11
+ prog=prog or 'python -m kafka.producer',
12
+ description='Kafka console producer',
13
+ )
14
+ add_common_cli_args(parser)
15
+ options = parser.add_argument_group('producer options')
16
+ options.add_argument(
17
+ '-t', '--topic', type=str, required=True,
18
+ help='publish to topic')
19
+ options.add_argument(
20
+ '--encoding', type=str, default='utf-8',
21
+ help='byte encoding for produced messages')
22
+ return parser
23
+
24
+
25
+ def run_cli(args=None, prog=None):
26
+ parser = main_parser(prog=prog)
27
+ config = parser.parse_args(args)
28
+
29
+ configure_logging(config)
30
+ logger = logging.getLogger(__name__)
31
+
32
+ kwargs = build_connect_kwargs(config)
33
+ producer = KafkaProducer(**kwargs)
34
+
35
+ def log_result(res_or_err):
36
+ if isinstance(res_or_err, Exception):
37
+ logger.error("Error producing message", exc_info=res_or_err)
38
+ else:
39
+ logger.info("Message produced: %s", res_or_err)
40
+
41
+ try:
42
+ while True:
43
+ try:
44
+ value = input()
45
+ except EOFError:
46
+ value = sys.stdin.read().rstrip('\n')
47
+ if not value:
48
+ return 0
49
+ producer.send(config.topic, value=value.encode(config.encoding)).add_both(log_result)
50
+ except KeyboardInterrupt:
51
+ logger.info('Bye!')
52
+ return 0
53
+ except Exception:
54
+ logger.critical('Error!', exc_info=True)
55
+ return 1
56
+ finally:
57
+ producer.close()