kafka-python 2.0.3__tar.gz → 2.0.5__tar.gz

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 (143) hide show
  1. {kafka-python-2.0.3 → kafka_python-2.0.5}/CHANGES.md +58 -0
  2. kafka_python-2.0.5/PKG-INFO +250 -0
  3. {kafka-python-2.0.3 → kafka_python-2.0.5}/README.rst +1 -1
  4. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/admin/client.py +370 -126
  5. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/client_async.py +81 -51
  6. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/cluster.py +1 -1
  7. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/codec.py +9 -2
  8. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/conn.py +38 -24
  9. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/consumer/group.py +2 -2
  10. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/base.py +11 -1
  11. kafka_python-2.0.5/kafka/errors.py +1097 -0
  12. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/producer/kafka.py +3 -3
  13. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/producer/sender.py +6 -6
  14. kafka_python-2.0.5/kafka/version.py +1 -0
  15. kafka_python-2.0.5/kafka_python.egg-info/PKG-INFO +250 -0
  16. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka_python.egg-info/SOURCES.txt +1 -1
  17. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka_python.egg-info/requires.txt +5 -0
  18. kafka_python-2.0.5/pyproject.toml +54 -0
  19. kafka_python-2.0.5/setup.cfg +4 -0
  20. kafka_python-2.0.5/setup.py +4 -0
  21. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_admin_integration.py +6 -3
  22. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_client_async.py +12 -18
  23. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_codec.py +2 -0
  24. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_conn.py +22 -2
  25. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_consumer_integration.py +3 -1
  26. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_sasl_integration.py +13 -7
  27. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/testutil.py +2 -2
  28. kafka-python-2.0.3/PKG-INFO +0 -244
  29. kafka-python-2.0.3/kafka/errors.py +0 -538
  30. kafka-python-2.0.3/kafka/version.py +0 -1
  31. kafka-python-2.0.3/kafka_python.egg-info/PKG-INFO +0 -244
  32. kafka-python-2.0.3/setup.cfg +0 -10
  33. kafka-python-2.0.3/setup.py +0 -78
  34. {kafka-python-2.0.3 → kafka_python-2.0.5}/AUTHORS.md +0 -0
  35. {kafka-python-2.0.3 → kafka_python-2.0.5}/LICENSE +0 -0
  36. {kafka-python-2.0.3 → kafka_python-2.0.5}/MANIFEST.in +0 -0
  37. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/__init__.py +0 -0
  38. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/admin/__init__.py +0 -0
  39. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/admin/acl_resource.py +0 -0
  40. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/admin/config_resource.py +0 -0
  41. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/admin/new_partitions.py +0 -0
  42. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/admin/new_topic.py +0 -0
  43. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/consumer/__init__.py +0 -0
  44. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/consumer/fetcher.py +0 -0
  45. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/consumer/subscription_state.py +0 -0
  46. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/__init__.py +0 -0
  47. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/__init__.py +0 -0
  48. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/abstract.py +0 -0
  49. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/range.py +0 -0
  50. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/roundrobin.py +0 -0
  51. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/sticky/__init__.py +0 -0
  52. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/sticky/partition_movements.py +0 -0
  53. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/sticky/sorted_set.py +0 -0
  54. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/assignors/sticky/sticky_assignor.py +0 -0
  55. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/consumer.py +0 -0
  56. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/heartbeat.py +0 -0
  57. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/coordinator/protocol.py +0 -0
  58. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/future.py +0 -0
  59. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/__init__.py +0 -0
  60. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/compound_stat.py +0 -0
  61. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/dict_reporter.py +0 -0
  62. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/kafka_metric.py +0 -0
  63. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/measurable.py +0 -0
  64. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/measurable_stat.py +0 -0
  65. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/metric_config.py +0 -0
  66. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/metric_name.py +0 -0
  67. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/metrics.py +0 -0
  68. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/metrics_reporter.py +0 -0
  69. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/quota.py +0 -0
  70. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stat.py +0 -0
  71. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/__init__.py +0 -0
  72. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/avg.py +0 -0
  73. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/count.py +0 -0
  74. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/histogram.py +0 -0
  75. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/max_stat.py +0 -0
  76. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/min_stat.py +0 -0
  77. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/percentile.py +0 -0
  78. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/percentiles.py +0 -0
  79. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/rate.py +0 -0
  80. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/sampled_stat.py +0 -0
  81. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/sensor.py +0 -0
  82. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/metrics/stats/total.py +0 -0
  83. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/oauth/__init__.py +0 -0
  84. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/oauth/abstract.py +0 -0
  85. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/partitioner/__init__.py +0 -0
  86. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/partitioner/default.py +0 -0
  87. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/producer/__init__.py +0 -0
  88. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/producer/buffer.py +0 -0
  89. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/producer/future.py +0 -0
  90. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/producer/record_accumulator.py +0 -0
  91. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/__init__.py +0 -0
  92. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/abstract.py +0 -0
  93. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/admin.py +0 -0
  94. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/api.py +0 -0
  95. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/commit.py +0 -0
  96. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/fetch.py +0 -0
  97. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/frame.py +0 -0
  98. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/group.py +0 -0
  99. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/message.py +0 -0
  100. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/metadata.py +0 -0
  101. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/offset.py +0 -0
  102. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/parser.py +0 -0
  103. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/pickle.py +0 -0
  104. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/produce.py +0 -0
  105. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/struct.py +0 -0
  106. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/protocol/types.py +0 -0
  107. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/__init__.py +0 -0
  108. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/_crc32c.py +0 -0
  109. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/abc.py +0 -0
  110. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/default_records.py +0 -0
  111. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/legacy_records.py +0 -0
  112. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/memory_records.py +0 -0
  113. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/record/util.py +0 -0
  114. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/scram.py +0 -0
  115. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/serializer/__init__.py +0 -0
  116. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/serializer/abstract.py +0 -0
  117. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/structs.py +0 -0
  118. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/util.py +0 -0
  119. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/vendor/__init__.py +0 -0
  120. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/vendor/enum34.py +0 -0
  121. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/vendor/selectors34.py +0 -0
  122. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/vendor/six.py +0 -0
  123. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka/vendor/socketpair.py +0 -0
  124. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka_python.egg-info/dependency_links.txt +0 -0
  125. {kafka-python-2.0.3 → kafka_python-2.0.5}/kafka_python.egg-info/top_level.txt +0 -0
  126. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_acl_comparisons.py +0 -0
  127. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_admin.py +0 -0
  128. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_api_object_implementation.py +0 -0
  129. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_assignors.py +0 -0
  130. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_cluster.py +0 -0
  131. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_consumer.py +0 -0
  132. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_consumer_group.py +0 -0
  133. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_coordinator.py +0 -0
  134. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_fetcher.py +0 -0
  135. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_metrics.py +0 -0
  136. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_object_conversion.py +0 -0
  137. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_package.py +0 -0
  138. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_partition_movements.py +0 -0
  139. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_partitioner.py +0 -0
  140. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_producer.py +0 -0
  141. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_protocol.py +0 -0
  142. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_sender.py +0 -0
  143. {kafka-python-2.0.3 → kafka_python-2.0.5}/test/test_subscription_state.py +0 -0
@@ -1,3 +1,61 @@
1
+ # 2.0.5 (Feb 25, 2025)
2
+
3
+ Networking
4
+ * Remove unused client bootstrap backoff code
5
+ * 200ms timeout for client.poll in ensure_active_group and admin client
6
+
7
+ Fixes
8
+ * Admin client: check_version only if needed, use node_id kwarg for controller
9
+ * Check for -1 controller_id in admin client
10
+ * Only acquire coordinator lock in heartbeat thread close if not self thread
11
+
12
+ Testing
13
+ * Also sleep when waiting for consumers in test_describe_consumer_group_exists
14
+ * Refactor sasl_integration test_client - wait for node ready; use send future
15
+ * Add timeout to test_kafka_consumer
16
+ * Add error str to assert_message_count checks
17
+ * Retry on error in test fixture create_topic_via_metadata
18
+ * Fixup variable interpolation in test fixture error
19
+
20
+ Documentation
21
+ * Update compatibility docs
22
+ * Include client_id in BrokerConnection __str__ output
23
+
24
+ Project Maintenance
25
+ * Add make targets `servers/*/api_versions` and `servers/*/messages`
26
+
27
+ # 2.0.4 (Feb 21, 2025)
28
+
29
+ Networking
30
+ * Check for wakeup socket errors on read and close and reinit to reset (#2482)
31
+ * Improve client networking backoff / retry (#2480)
32
+ * Check for socket and unresolved futures before creating selector in conn.check_version (#2477)
33
+ * Handle socket init errors, e.g., when IPv6 is disabled (#2476)
34
+
35
+ Fixes
36
+ * Avoid self-join in heartbeat thread close (#2488)
37
+
38
+ Error Handling
39
+ * Always log broker errors in producer.send (#2478)
40
+ * Retain unrecognized broker response error codes with dynamic error class (#2481)
41
+ * Update kafka.errors with latest types (#2485)
42
+
43
+ Compatibility
44
+ * Do not validate snappy xerial header version and compat fields (for redpanda) (#2483)
45
+
46
+ Documentation
47
+ * Added missing docstrings in admin/client.py (#2487)
48
+
49
+ Testing
50
+ * Update kafka broker test matrix; test against 3.9.0 (#2486)
51
+ * Add default resources for new kafka server fixtures (#2484)
52
+ * Drop make test-local; add PYTESTS configuration var
53
+ * Fix pytest runs when KAFKA_VERSION is not set
54
+
55
+ Project Maintenance
56
+ * Migrate to pyproject.toml / PEP-621
57
+ * Remove old travis files; update compatibility tests link to gha
58
+
1
59
  # 2.0.3 (Feb 12, 2025)
2
60
 
3
61
  Improvements
@@ -0,0 +1,250 @@
1
+ Metadata-Version: 2.2
2
+ Name: kafka-python
3
+ Version: 2.0.5
4
+ Summary: Pure Python client for Apache Kafka
5
+ Author-email: Dana Powers <dana.powers@gmail.com>
6
+ Project-URL: Homepage, https://github.com/dpkp/kafka-python
7
+ Keywords: apache kafka,kafka
8
+ Classifier: Development Status :: 5 - Production/Stable
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Programming Language :: Python
12
+ Classifier: Programming Language :: Python :: 2
13
+ Classifier: Programming Language :: Python :: 2.7
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.4
16
+ Classifier: Programming Language :: Python :: 3.5
17
+ Classifier: Programming Language :: Python :: 3.6
18
+ Classifier: Programming Language :: Python :: 3.7
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: Implementation :: CPython
25
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
26
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
+ Description-Content-Type: text/x-rst
28
+ Provides-Extra: crc32c
29
+ Requires-Dist: crc32c; extra == "crc32c"
30
+ Provides-Extra: lz4
31
+ Requires-Dist: lz4; extra == "lz4"
32
+ Provides-Extra: snappy
33
+ Requires-Dist: python-snappy; extra == "snappy"
34
+ Provides-Extra: zstd
35
+ Requires-Dist: zstandard; extra == "zstd"
36
+ Provides-Extra: testing
37
+ Requires-Dist: pytest; extra == "testing"
38
+ Requires-Dist: mock; extra == "testing"
39
+ Requires-Dist: pytest-mock; extra == "testing"
40
+
41
+ Kafka Python client
42
+ ------------------------
43
+
44
+ .. image:: https://img.shields.io/badge/kafka-3.9--0.8-brightgreen.svg
45
+ :target: https://kafka-python.readthedocs.io/en/master/compatibility.html
46
+ .. image:: https://img.shields.io/pypi/pyversions/kafka-python.svg
47
+ :target: https://pypi.python.org/pypi/kafka-python
48
+ .. image:: https://coveralls.io/repos/dpkp/kafka-python/badge.svg?branch=master&service=github
49
+ :target: https://coveralls.io/github/dpkp/kafka-python?branch=master
50
+ .. image:: https://img.shields.io/badge/license-Apache%202-blue.svg
51
+ :target: https://github.com/dpkp/kafka-python/blob/master/LICENSE
52
+ .. image:: https://img.shields.io/pypi/dw/kafka-python.svg
53
+ :target: https://pypistats.org/packages/kafka-python
54
+ .. image:: https://img.shields.io/pypi/v/kafka-python.svg
55
+ :target: https://pypi.org/project/kafka-python
56
+ .. image:: https://img.shields.io/pypi/implementation/kafka-python
57
+ :target: https://github.com/dpkp/kafka-python/blob/master/setup.py
58
+
59
+
60
+
61
+ Python client for the Apache Kafka distributed stream processing system.
62
+ kafka-python is designed to function much like the official java client, with a
63
+ sprinkling of pythonic interfaces (e.g., consumer iterators).
64
+
65
+ kafka-python is best used with newer brokers (0.9+), but is backwards-compatible with
66
+ older versions (to 0.8.0). Some features will only be enabled on newer brokers.
67
+ For example, fully coordinated consumer groups -- i.e., dynamic partition
68
+ assignment to multiple consumers in the same group -- requires use of 0.9+ kafka
69
+ brokers. Supporting this feature for earlier broker releases would require
70
+ writing and maintaining custom leadership election and membership / health
71
+ check code (perhaps using zookeeper or consul). For older brokers, you can
72
+ achieve something similar by manually assigning different partitions to each
73
+ consumer instance with config management tools like chef, ansible, etc. This
74
+ approach will work fine, though it does not support rebalancing on failures.
75
+ See https://kafka-python.readthedocs.io/en/master/compatibility.html
76
+ for more details.
77
+
78
+ Please note that the master branch may contain unreleased features. For release
79
+ documentation, please see readthedocs and/or python's inline help.
80
+
81
+ .. code-block:: bash
82
+
83
+ $ pip install kafka-python
84
+
85
+
86
+ KafkaConsumer
87
+ *************
88
+
89
+ KafkaConsumer is a high-level message consumer, intended to operate as similarly
90
+ as possible to the official java client. Full support for coordinated
91
+ consumer groups requires use of kafka brokers that support the Group APIs: kafka v0.9+.
92
+
93
+ See https://kafka-python.readthedocs.io/en/master/apidoc/KafkaConsumer.html
94
+ for API and configuration details.
95
+
96
+ The consumer iterator returns ConsumerRecords, which are simple namedtuples
97
+ that expose basic message attributes: topic, partition, offset, key, and value:
98
+
99
+ .. code-block:: python
100
+
101
+ from kafka import KafkaConsumer
102
+ consumer = KafkaConsumer('my_favorite_topic')
103
+ for msg in consumer:
104
+ print (msg)
105
+
106
+ .. code-block:: python
107
+
108
+ # join a consumer group for dynamic partition assignment and offset commits
109
+ from kafka import KafkaConsumer
110
+ consumer = KafkaConsumer('my_favorite_topic', group_id='my_favorite_group')
111
+ for msg in consumer:
112
+ print (msg)
113
+
114
+ .. code-block:: python
115
+
116
+ # manually assign the partition list for the consumer
117
+ from kafka import TopicPartition
118
+ consumer = KafkaConsumer(bootstrap_servers='localhost:1234')
119
+ consumer.assign([TopicPartition('foobar', 2)])
120
+ msg = next(consumer)
121
+
122
+ .. code-block:: python
123
+
124
+ # Deserialize msgpack-encoded values
125
+ consumer = KafkaConsumer(value_deserializer=msgpack.loads)
126
+ consumer.subscribe(['msgpackfoo'])
127
+ for msg in consumer:
128
+ assert isinstance(msg.value, dict)
129
+
130
+ .. code-block:: python
131
+
132
+ # Access record headers. The returned value is a list of tuples
133
+ # with str, bytes for key and value
134
+ for msg in consumer:
135
+ print (msg.headers)
136
+
137
+ .. code-block:: python
138
+
139
+ # Get consumer metrics
140
+ metrics = consumer.metrics()
141
+
142
+
143
+ KafkaProducer
144
+ *************
145
+
146
+ KafkaProducer is a high-level, asynchronous message producer. The class is
147
+ intended to operate as similarly as possible to the official java client.
148
+ See https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html
149
+ for more details.
150
+
151
+ .. code-block:: python
152
+
153
+ from kafka import KafkaProducer
154
+ producer = KafkaProducer(bootstrap_servers='localhost:1234')
155
+ for _ in range(100):
156
+ producer.send('foobar', b'some_message_bytes')
157
+
158
+ .. code-block:: python
159
+
160
+ # Block until a single message is sent (or timeout)
161
+ future = producer.send('foobar', b'another_message')
162
+ result = future.get(timeout=60)
163
+
164
+ .. code-block:: python
165
+
166
+ # Block until all pending messages are at least put on the network
167
+ # NOTE: This does not guarantee delivery or success! It is really
168
+ # only useful if you configure internal batching using linger_ms
169
+ producer.flush()
170
+
171
+ .. code-block:: python
172
+
173
+ # Use a key for hashed-partitioning
174
+ producer.send('foobar', key=b'foo', value=b'bar')
175
+
176
+ .. code-block:: python
177
+
178
+ # Serialize json messages
179
+ import json
180
+ producer = KafkaProducer(value_serializer=lambda v: json.dumps(v).encode('utf-8'))
181
+ producer.send('fizzbuzz', {'foo': 'bar'})
182
+
183
+ .. code-block:: python
184
+
185
+ # Serialize string keys
186
+ producer = KafkaProducer(key_serializer=str.encode)
187
+ producer.send('flipflap', key='ping', value=b'1234')
188
+
189
+ .. code-block:: python
190
+
191
+ # Compress messages
192
+ producer = KafkaProducer(compression_type='gzip')
193
+ for i in range(1000):
194
+ producer.send('foobar', b'msg %d' % i)
195
+
196
+ .. code-block:: python
197
+
198
+ # Include record headers. The format is list of tuples with string key
199
+ # and bytes value.
200
+ producer.send('foobar', value=b'c29tZSB2YWx1ZQ==', headers=[('content-encoding', b'base64')])
201
+
202
+ .. code-block:: python
203
+
204
+ # Get producer performance metrics
205
+ metrics = producer.metrics()
206
+
207
+
208
+ Thread safety
209
+ *************
210
+
211
+ The KafkaProducer can be used across threads without issue, unlike the
212
+ KafkaConsumer which cannot.
213
+
214
+ While it is possible to use the KafkaConsumer in a thread-local manner,
215
+ multiprocessing is recommended.
216
+
217
+
218
+ Compression
219
+ ***********
220
+
221
+ kafka-python supports the following compression formats:
222
+
223
+ - gzip
224
+ - LZ4
225
+ - Snappy
226
+ - Zstandard (zstd)
227
+
228
+ gzip is supported natively, the others require installing additional libraries.
229
+ See https://kafka-python.readthedocs.io/en/master/install.html for more information.
230
+
231
+
232
+ Optimized CRC32 Validation
233
+ **************************
234
+
235
+ Kafka uses CRC32 checksums to validate messages. kafka-python includes a pure
236
+ python implementation for compatibility. To improve performance for high-throughput
237
+ applications, kafka-python will use `crc32c` for optimized native code if installed.
238
+ See https://kafka-python.readthedocs.io/en/master/install.html for installation instructions.
239
+ See https://pypi.org/project/crc32c/ for details on the underlying crc32c lib.
240
+
241
+
242
+ Protocol
243
+ ********
244
+
245
+ A secondary goal of kafka-python is to provide an easy-to-use protocol layer
246
+ for interacting with kafka brokers via the python repl. This is useful for
247
+ testing, probing, and general experimentation. The protocol support is
248
+ leveraged to enable a KafkaClient.check_version() method that
249
+ probes a kafka broker and attempts to identify which version it is running
250
+ (0.8.0 to 2.6+).
@@ -1,7 +1,7 @@
1
1
  Kafka Python client
2
2
  ------------------------
3
3
 
4
- .. image:: https://img.shields.io/badge/kafka-2.6%2C%202.5%2C%202.4%2C%202.3%2C%202.2%2C%202.1%2C%202.0%2C%201.1%2C%201.0%2C%200.11%2C%200.10%2C%200.9%2C%200.8-brightgreen.svg
4
+ .. image:: https://img.shields.io/badge/kafka-3.9--0.8-brightgreen.svg
5
5
  :target: https://kafka-python.readthedocs.io/en/master/compatibility.html
6
6
  .. image:: https://img.shields.io/pypi/pyversions/kafka-python.svg
7
7
  :target: https://pypi.python.org/pypi/kafka-python