kafka-python 2.2.6__py2.py3-none-any.whl → 2.2.7__py2.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.
kafka/coordinator/base.py CHANGED
@@ -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)
kafka/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = '2.2.6'
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
@@ -8,7 +8,7 @@ kafka/future.py,sha256=ZQStbfUYIPJRrgMfAWxxjrIRVxsw4WCtSR0J0bkyGno,2847
8
8
  kafka/socks5_wrapper.py,sha256=6woOaCTJXJ5e89_zdyW5BjOpyE4rCbYFH-kd-FeuPuk,9827
9
9
  kafka/structs.py,sha256=SJGzmLdV21jZyQ7247k0WFy16UiusgTHK3I-e4qzI-E,3058
10
10
  kafka/util.py,sha256=EnzCJuRkQ6Kh2lIdNwFKvT4PddkZ5bzop4ooGGIhe5g,4366
11
- kafka/version.py,sha256=ki8CvreWdC_q66zVTHoUGjT2EI8obe9OHjOQcNZfOfM,22
11
+ kafka/version.py,sha256=_a_I7cjpwo5jHaXCQYkNQgSKbe2WWcxvqM6NIPlZ27w,22
12
12
  kafka/admin/__init__.py,sha256=S_XxqyyV480_yXhttK79XZqNAmZyXRjspd3SoqYykE8,720
13
13
  kafka/admin/acl_resource.py,sha256=ak_dUsSni4SyP0ORbSKenZpwTy0Ykxq3FSt_9XgLR8k,8265
14
14
  kafka/admin/client.py,sha256=RabA8l8Im3iBEXgPVkiofNW6QyeatQHaymBWFZ8Sxkw,78929
@@ -27,9 +27,9 @@ kafka/consumer/fetcher.py,sha256=iwYhWotaEQ55oXTzGKPUOYxvC_6FcoIks_ZqL-gu3DE,688
27
27
  kafka/consumer/group.py,sha256=xmEpVMPJbCAk9__pdAOMswh8I-Ujj5hBax_hPZHZb_s,58758
28
28
  kafka/consumer/subscription_state.py,sha256=f_qJQMhTWQnUd_7lPj43gsagWSKGEmP4jpnEwA6s1Ec,23661
29
29
  kafka/coordinator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- kafka/coordinator/base.py,sha256=mYTn0ldZgoljxxstF8mA4MxUQaYPSZr83FwvwCU3Av0,51761
30
+ kafka/coordinator/base.py,sha256=fT6lOD7whmZ1jY7M-D6L5aR7daedxwJmhL7mZGfX4GE,51858
31
31
  kafka/coordinator/consumer.py,sha256=IJWWt4E6E7JZZGKtGgPtud9V3eqs0js6EaosS3bxffE,44766
32
- kafka/coordinator/heartbeat.py,sha256=WJqZGnXHG7TTq1Is3D0mKDis-bBwWVZlSgQiUoZv1jU,2304
32
+ kafka/coordinator/heartbeat.py,sha256=LeJJlwz1oUEOfEMIFT-R7ZOHBQ-b-luVKwmKyWxLfDo,3242
33
33
  kafka/coordinator/protocol.py,sha256=wTaIOnUVbj0CKXZ82FktZo-zMRvOCk3hdQAoHJ62e3I,1041
34
34
  kafka/coordinator/assignors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  kafka/coordinator/assignors/abstract.py,sha256=belUnCkuw70HJ8HTWYIgVrT6pJmIBBrTl1vkO-bN1C0,1507
@@ -120,7 +120,7 @@ kafka/vendor/enum34.py,sha256=-u-lxAiJMt6ru4Do7NUDY9OpeWkYJMksb2xengJawFE,31204
120
120
  kafka/vendor/selectors34.py,sha256=gxejLO4eXf8mRSGXaQiknPig3GdX1rtsZiYOQJVuAy8,20594
121
121
  kafka/vendor/six.py,sha256=lLBa9_HrANP5BMZ7twEzg1M3wofwPmXyptuWmHX0brY,34826
122
122
  kafka/vendor/socketpair.py,sha256=Fi3PoY1Okkppab720wFk1BhHXyjcw7hi5DwhqrYZH2Y,2737
123
- kafka_python-2.2.6.dist-info/METADATA,sha256=3J37JUCY6RdrHghp6U2KKIb4TN-B8ePAWcMvKi6waSs,9951
124
- kafka_python-2.2.6.dist-info/WHEEL,sha256=oSJJyWjO7Z2XSScFQUpXG1HL-N0sFMqqeKVVbZTPkWc,109
125
- kafka_python-2.2.6.dist-info/top_level.txt,sha256=IivJz7l5WHdLNDT6RIiVAlhjQzYRwGqBBmKHZ7WjPeM,6
126
- kafka_python-2.2.6.dist-info/RECORD,,
123
+ kafka_python-2.2.7.dist-info/METADATA,sha256=DaRVJ4MFgXCCQvTdyKm39Be5iorMY5YN-3w6zHMvVnA,9951
124
+ kafka_python-2.2.7.dist-info/WHEEL,sha256=joeZ_q2kZqPjVkNy_YbjGrynLS6bxmBj74YkvIORXVI,109
125
+ kafka_python-2.2.7.dist-info/top_level.txt,sha256=IivJz7l5WHdLNDT6RIiVAlhjQzYRwGqBBmKHZ7WjPeM,6
126
+ kafka_python-2.2.7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.1)
2
+ Generator: setuptools (80.4.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any