kafka-python 2.2.6__tar.gz → 2.2.7__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 (168) hide show
  1. {kafka_python-2.2.6 → kafka_python-2.2.7}/CHANGES.md +5 -0
  2. {kafka_python-2.2.6 → kafka_python-2.2.7}/PKG-INFO +1 -1
  3. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/base.py +9 -9
  4. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/heartbeat.py +19 -3
  5. kafka_python-2.2.7/kafka/version.py +1 -0
  6. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka_python.egg-info/PKG-INFO +1 -1
  7. kafka_python-2.2.6/kafka/version.py +0 -1
  8. {kafka_python-2.2.6 → kafka_python-2.2.7}/AUTHORS.md +0 -0
  9. {kafka_python-2.2.6 → kafka_python-2.2.7}/LICENSE +0 -0
  10. {kafka_python-2.2.6 → kafka_python-2.2.7}/MANIFEST.in +0 -0
  11. {kafka_python-2.2.6 → kafka_python-2.2.7}/README.rst +0 -0
  12. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/__init__.py +0 -0
  13. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/admin/__init__.py +0 -0
  14. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/admin/acl_resource.py +0 -0
  15. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/admin/client.py +0 -0
  16. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/admin/config_resource.py +0 -0
  17. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/admin/new_partitions.py +0 -0
  18. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/admin/new_topic.py +0 -0
  19. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/__init__.py +0 -0
  20. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/consumer_performance.py +0 -0
  21. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/load_example.py +0 -0
  22. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/producer_performance.py +0 -0
  23. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/record_batch_compose.py +0 -0
  24. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/record_batch_read.py +0 -0
  25. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/benchmarks/varint_speed.py +0 -0
  26. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/client_async.py +0 -0
  27. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/cluster.py +0 -0
  28. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/codec.py +0 -0
  29. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/conn.py +0 -0
  30. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/consumer/__init__.py +0 -0
  31. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/consumer/fetcher.py +0 -0
  32. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/consumer/group.py +0 -0
  33. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/consumer/subscription_state.py +0 -0
  34. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/__init__.py +0 -0
  35. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/__init__.py +0 -0
  36. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/abstract.py +0 -0
  37. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/range.py +0 -0
  38. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/roundrobin.py +0 -0
  39. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/sticky/__init__.py +0 -0
  40. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/sticky/partition_movements.py +0 -0
  41. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/sticky/sorted_set.py +0 -0
  42. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/assignors/sticky/sticky_assignor.py +0 -0
  43. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/consumer.py +0 -0
  44. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/coordinator/protocol.py +0 -0
  45. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/errors.py +0 -0
  46. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/future.py +0 -0
  47. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/__init__.py +0 -0
  48. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/compound_stat.py +0 -0
  49. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/dict_reporter.py +0 -0
  50. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/kafka_metric.py +0 -0
  51. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/measurable.py +0 -0
  52. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/measurable_stat.py +0 -0
  53. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/metric_config.py +0 -0
  54. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/metric_name.py +0 -0
  55. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/metrics.py +0 -0
  56. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/metrics_reporter.py +0 -0
  57. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/quota.py +0 -0
  58. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stat.py +0 -0
  59. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/__init__.py +0 -0
  60. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/avg.py +0 -0
  61. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/count.py +0 -0
  62. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/histogram.py +0 -0
  63. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/max_stat.py +0 -0
  64. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/min_stat.py +0 -0
  65. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/percentile.py +0 -0
  66. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/percentiles.py +0 -0
  67. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/rate.py +0 -0
  68. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/sampled_stat.py +0 -0
  69. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/sensor.py +0 -0
  70. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/metrics/stats/total.py +0 -0
  71. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/partitioner/__init__.py +0 -0
  72. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/partitioner/default.py +0 -0
  73. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/producer/__init__.py +0 -0
  74. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/producer/future.py +0 -0
  75. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/producer/kafka.py +0 -0
  76. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/producer/record_accumulator.py +0 -0
  77. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/producer/sender.py +0 -0
  78. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/producer/transaction_manager.py +0 -0
  79. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/__init__.py +0 -0
  80. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/abstract.py +0 -0
  81. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/add_offsets_to_txn.py +0 -0
  82. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/add_partitions_to_txn.py +0 -0
  83. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/admin.py +0 -0
  84. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/api.py +0 -0
  85. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/api_versions.py +0 -0
  86. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/broker_api_versions.py +0 -0
  87. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/commit.py +0 -0
  88. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/end_txn.py +0 -0
  89. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/fetch.py +0 -0
  90. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/find_coordinator.py +0 -0
  91. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/frame.py +0 -0
  92. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/group.py +0 -0
  93. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/init_producer_id.py +0 -0
  94. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/list_offsets.py +0 -0
  95. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/message.py +0 -0
  96. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/metadata.py +0 -0
  97. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/offset_for_leader_epoch.py +0 -0
  98. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/parser.py +0 -0
  99. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/pickle.py +0 -0
  100. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/produce.py +0 -0
  101. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/sasl_authenticate.py +0 -0
  102. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/sasl_handshake.py +0 -0
  103. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/struct.py +0 -0
  104. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/txn_offset_commit.py +0 -0
  105. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/protocol/types.py +0 -0
  106. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/__init__.py +0 -0
  107. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/_crc32c.py +0 -0
  108. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/abc.py +0 -0
  109. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/default_records.py +0 -0
  110. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/legacy_records.py +0 -0
  111. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/memory_records.py +0 -0
  112. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/record/util.py +0 -0
  113. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/__init__.py +0 -0
  114. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/abc.py +0 -0
  115. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/gssapi.py +0 -0
  116. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/msk.py +0 -0
  117. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/oauth.py +0 -0
  118. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/plain.py +0 -0
  119. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/scram.py +0 -0
  120. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/sasl/sspi.py +0 -0
  121. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/serializer/__init__.py +0 -0
  122. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/serializer/abstract.py +0 -0
  123. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/socks5_wrapper.py +0 -0
  124. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/structs.py +0 -0
  125. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/util.py +0 -0
  126. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/vendor/__init__.py +0 -0
  127. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/vendor/enum34.py +0 -0
  128. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/vendor/selectors34.py +0 -0
  129. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/vendor/six.py +0 -0
  130. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka/vendor/socketpair.py +0 -0
  131. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka_python.egg-info/SOURCES.txt +0 -0
  132. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka_python.egg-info/dependency_links.txt +0 -0
  133. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka_python.egg-info/requires.txt +0 -0
  134. {kafka_python-2.2.6 → kafka_python-2.2.7}/kafka_python.egg-info/top_level.txt +0 -0
  135. {kafka_python-2.2.6 → kafka_python-2.2.7}/pyproject.toml +0 -0
  136. {kafka_python-2.2.6 → kafka_python-2.2.7}/setup.cfg +0 -0
  137. {kafka_python-2.2.6 → kafka_python-2.2.7}/setup.py +0 -0
  138. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/__init__.py +0 -0
  139. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/conftest.py +0 -0
  140. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/fixtures.py +0 -0
  141. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/test_admin_integration.py +0 -0
  142. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/test_consumer_group.py +0 -0
  143. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/test_consumer_integration.py +0 -0
  144. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/test_producer_integration.py +0 -0
  145. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/integration/test_sasl_integration.py +0 -0
  146. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_acl_comparisons.py +0 -0
  147. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_admin.py +0 -0
  148. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_api_object_implementation.py +0 -0
  149. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_assignors.py +0 -0
  150. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_client_async.py +0 -0
  151. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_cluster.py +0 -0
  152. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_codec.py +0 -0
  153. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_conn.py +0 -0
  154. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_consumer.py +0 -0
  155. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_coordinator.py +0 -0
  156. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_fetcher.py +0 -0
  157. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_metrics.py +0 -0
  158. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_object_conversion.py +0 -0
  159. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_package.py +0 -0
  160. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_partition_movements.py +0 -0
  161. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_partitioner.py +0 -0
  162. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_producer.py +0 -0
  163. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_protocol.py +0 -0
  164. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_record_accumulator.py +0 -0
  165. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_sender.py +0 -0
  166. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_subscription_state.py +0 -0
  167. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/test_util.py +0 -0
  168. {kafka_python-2.2.6 → kafka_python-2.2.7}/test/testutil.py +0 -0
@@ -1,3 +1,8 @@
1
+ # 2.2.7 (May 13, 2025)
2
+
3
+ Fixes
4
+ * Minor Heartbeat updates: catch more exceptions / log configuration / raise KafkaConfigurationError (#2618)
5
+
1
6
  # 2.2.6 (May 8, 2025)
2
7
 
3
8
  Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kafka-python
3
- Version: 2.2.6
3
+ Version: 2.2.7
4
4
  Summary: Pure Python client for Apache Kafka
5
5
  Author-email: Dana Powers <dana.powers@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/dpkp/kafka-python
@@ -909,28 +909,28 @@ class BaseCoordinator(object):
909
909
  error_type = Errors.for_code(response.error_code)
910
910
  if error_type is Errors.NoError:
911
911
  heartbeat_log.debug("Received successful heartbeat response for group %s",
912
- self.group_id)
912
+ self.group_id)
913
913
  future.success(None)
914
914
  elif error_type in (Errors.CoordinatorNotAvailableError,
915
915
  Errors.NotCoordinatorError):
916
916
  heartbeat_log.warning("Heartbeat failed for group %s: coordinator (node %s)"
917
- " is either not started or not valid", self.group_id,
917
+ " is either not started or not valid", self.group_id,
918
918
  self.coordinator())
919
919
  self.coordinator_dead(error_type())
920
920
  future.failure(error_type())
921
921
  elif error_type is Errors.RebalanceInProgressError:
922
922
  heartbeat_log.warning("Heartbeat failed for group %s because it is"
923
- " rebalancing", self.group_id)
923
+ " rebalancing", self.group_id)
924
924
  self.request_rejoin()
925
925
  future.failure(error_type())
926
926
  elif error_type is Errors.IllegalGenerationError:
927
927
  heartbeat_log.warning("Heartbeat failed for group %s: generation id is not "
928
- " current.", self.group_id)
928
+ " current.", self.group_id)
929
929
  self.reset_generation()
930
930
  future.failure(error_type())
931
931
  elif error_type is Errors.UnknownMemberIdError:
932
932
  heartbeat_log.warning("Heartbeat: local member_id was not recognized;"
933
- " this consumer needs to re-join")
933
+ " this consumer needs to re-join")
934
934
  self.reset_generation()
935
935
  future.failure(error_type)
936
936
  elif error_type is Errors.GroupAuthorizationFailedError:
@@ -1038,16 +1038,16 @@ class HeartbeatThread(threading.Thread):
1038
1038
 
1039
1039
  def run(self):
1040
1040
  try:
1041
- heartbeat_log.debug('Heartbeat thread started')
1041
+ heartbeat_log.debug('Heartbeat thread started: %s', self.coordinator.heartbeat)
1042
1042
  while not self.closed:
1043
1043
  self._run_once()
1044
1044
 
1045
1045
  except ReferenceError:
1046
1046
  heartbeat_log.debug('Heartbeat thread closed due to coordinator gc')
1047
1047
 
1048
- except RuntimeError as e:
1049
- heartbeat_log.error("Heartbeat thread for group %s failed due to unexpected error: %s",
1050
- self.coordinator.group_id, e)
1048
+ except Exception as e:
1049
+ heartbeat_log.exception("Heartbeat thread for group %s failed due to unexpected error: %s",
1050
+ self.coordinator.group_id, e)
1051
1051
  self.failed = e
1052
1052
 
1053
1053
  finally:
@@ -1,8 +1,13 @@
1
1
  from __future__ import absolute_import, division
2
2
 
3
3
  import copy
4
+ import logging
4
5
  import time
5
6
 
7
+ from kafka.errors import KafkaConfigurationError
8
+
9
+ log = logging.getLogger(__name__)
10
+
6
11
 
7
12
  class Heartbeat(object):
8
13
  DEFAULT_CONFIG = {
@@ -20,9 +25,13 @@ class Heartbeat(object):
20
25
  self.config[key] = configs[key]
21
26
 
22
27
  if self.config['group_id'] is not None:
23
- assert (self.config['heartbeat_interval_ms']
24
- <= self.config['session_timeout_ms']), (
25
- 'Heartbeat interval must be lower than the session timeout')
28
+ if self.config['heartbeat_interval_ms'] >= self.config['session_timeout_ms']:
29
+ raise KafkaConfigurationError('Heartbeat interval must be lower than the session timeout (%s v %s)' % (
30
+ self.config['heartbeat_interval_ms'], self.config['session_timeout_ms']))
31
+ if self.config['heartbeat_interval_ms'] > (self.config['session_timeout_ms'] / 3):
32
+ log.warning('heartbeat_interval_ms is high relative to session_timeout_ms (%s v %s).'
33
+ ' Recommend heartbeat interval less than 1/3rd of session timeout',
34
+ self.config['heartbeat_interval_ms'], self.config['session_timeout_ms'])
26
35
 
27
36
  self.last_send = -1 * float('inf')
28
37
  self.last_receive = -1 * float('inf')
@@ -66,3 +75,10 @@ class Heartbeat(object):
66
75
 
67
76
  def poll_timeout_expired(self):
68
77
  return (time.time() - self.last_poll) > (self.config['max_poll_interval_ms'] / 1000)
78
+
79
+ def __str__(self):
80
+ return ("<Heartbeat group_id={group_id}"
81
+ " heartbeat_interval_ms={heartbeat_interval_ms}"
82
+ " session_timeout_ms={session_timeout_ms}"
83
+ " max_poll_interval_ms={max_poll_interval_ms}"
84
+ " retry_backoff_ms={retry_backoff_ms}>").format(**self.config)
@@ -0,0 +1 @@
1
+ __version__ = '2.2.7'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kafka-python
3
- Version: 2.2.6
3
+ Version: 2.2.7
4
4
  Summary: Pure Python client for Apache Kafka
5
5
  Author-email: Dana Powers <dana.powers@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/dpkp/kafka-python
@@ -1 +0,0 @@
1
- __version__ = '2.2.6'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes