kafka-python 2.2.10__py2.py3-none-any.whl → 2.2.12__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/cluster.py +9 -8
- kafka/consumer/fetcher.py +2 -1
- kafka/consumer/subscription_state.py +34 -1
- kafka/metrics/stats/percentiles.py +1 -1
- kafka/producer/kafka.py +3 -1
- kafka/sasl/gssapi.py +4 -2
- kafka/sasl/msk.py +14 -3
- kafka/util.py +9 -0
- kafka/version.py +1 -1
- {kafka_python-2.2.10.dist-info → kafka_python-2.2.12.dist-info}/METADATA +1 -1
- {kafka_python-2.2.10.dist-info → kafka_python-2.2.12.dist-info}/RECORD +13 -13
- {kafka_python-2.2.10.dist-info → kafka_python-2.2.12.dist-info}/WHEEL +1 -1
- {kafka_python-2.2.10.dist-info → kafka_python-2.2.12.dist-info}/top_level.txt +0 -0
kafka/cluster.py
CHANGED
|
@@ -245,13 +245,6 @@ class ClusterMetadata(object):
|
|
|
245
245
|
|
|
246
246
|
Returns: None
|
|
247
247
|
"""
|
|
248
|
-
# In the common case where we ask for a single topic and get back an
|
|
249
|
-
# error, we should fail the future
|
|
250
|
-
if len(metadata.topics) == 1 and metadata.topics[0][0] != Errors.NoError.errno:
|
|
251
|
-
error_code, topic = metadata.topics[0][:2]
|
|
252
|
-
error = Errors.for_code(error_code)(topic)
|
|
253
|
-
return self.failed_update(error)
|
|
254
|
-
|
|
255
248
|
if not metadata.brokers:
|
|
256
249
|
log.warning("No broker metadata found in MetadataResponse -- ignoring.")
|
|
257
250
|
return self.failed_update(Errors.MetadataEmptyBrokerList(metadata))
|
|
@@ -349,7 +342,15 @@ class ClusterMetadata(object):
|
|
|
349
342
|
self._last_successful_refresh_ms = now
|
|
350
343
|
|
|
351
344
|
if f:
|
|
352
|
-
|
|
345
|
+
# In the common case where we ask for a single topic and get back an
|
|
346
|
+
# error, we should fail the future
|
|
347
|
+
if len(metadata.topics) == 1 and metadata.topics[0][0] != Errors.NoError.errno:
|
|
348
|
+
error_code, topic = metadata.topics[0][:2]
|
|
349
|
+
error = Errors.for_code(error_code)(topic)
|
|
350
|
+
f.failure(error)
|
|
351
|
+
else:
|
|
352
|
+
f.success(self)
|
|
353
|
+
|
|
353
354
|
log.debug("Updated cluster metadata to %s", self)
|
|
354
355
|
|
|
355
356
|
for listener in self._listeners:
|
kafka/consumer/fetcher.py
CHANGED
|
@@ -612,7 +612,8 @@ class Fetcher(six.Iterator):
|
|
|
612
612
|
def _fetchable_partitions(self):
|
|
613
613
|
fetchable = self._subscriptions.fetchable_partitions()
|
|
614
614
|
# do not fetch a partition if we have a pending fetch response to process
|
|
615
|
-
|
|
615
|
+
# use copy.copy to avoid runtimeerror on mutation from different thread
|
|
616
|
+
discard = {fetch.topic_partition for fetch in self._completed_fetches.copy()}
|
|
616
617
|
current = self._next_partition_records
|
|
617
618
|
if current:
|
|
618
619
|
discard.add(current.topic_partition)
|
|
@@ -15,6 +15,7 @@ except ImportError:
|
|
|
15
15
|
import logging
|
|
16
16
|
import random
|
|
17
17
|
import re
|
|
18
|
+
import threading
|
|
18
19
|
import time
|
|
19
20
|
|
|
20
21
|
from kafka.vendor import six
|
|
@@ -22,7 +23,7 @@ from kafka.vendor import six
|
|
|
22
23
|
import kafka.errors as Errors
|
|
23
24
|
from kafka.protocol.list_offsets import OffsetResetStrategy
|
|
24
25
|
from kafka.structs import OffsetAndMetadata
|
|
25
|
-
from kafka.util import ensure_valid_topic_name
|
|
26
|
+
from kafka.util import ensure_valid_topic_name, synchronized
|
|
26
27
|
|
|
27
28
|
log = logging.getLogger(__name__)
|
|
28
29
|
|
|
@@ -84,6 +85,7 @@ class SubscriptionState(object):
|
|
|
84
85
|
self.assignment = OrderedDict()
|
|
85
86
|
self.rebalance_listener = None
|
|
86
87
|
self.listeners = []
|
|
88
|
+
self._lock = threading.RLock()
|
|
87
89
|
|
|
88
90
|
def _set_subscription_type(self, subscription_type):
|
|
89
91
|
if not isinstance(subscription_type, SubscriptionType):
|
|
@@ -93,6 +95,7 @@ class SubscriptionState(object):
|
|
|
93
95
|
elif self.subscription_type != subscription_type:
|
|
94
96
|
raise Errors.IllegalStateError(self._SUBSCRIPTION_EXCEPTION_MESSAGE)
|
|
95
97
|
|
|
98
|
+
@synchronized
|
|
96
99
|
def subscribe(self, topics=(), pattern=None, listener=None):
|
|
97
100
|
"""Subscribe to a list of topics, or a topic regex pattern.
|
|
98
101
|
|
|
@@ -147,6 +150,7 @@ class SubscriptionState(object):
|
|
|
147
150
|
raise TypeError('listener must be a ConsumerRebalanceListener')
|
|
148
151
|
self.rebalance_listener = listener
|
|
149
152
|
|
|
153
|
+
@synchronized
|
|
150
154
|
def change_subscription(self, topics):
|
|
151
155
|
"""Change the topic subscription.
|
|
152
156
|
|
|
@@ -178,6 +182,7 @@ class SubscriptionState(object):
|
|
|
178
182
|
self.subscription = set(topics)
|
|
179
183
|
self._group_subscription.update(topics)
|
|
180
184
|
|
|
185
|
+
@synchronized
|
|
181
186
|
def group_subscribe(self, topics):
|
|
182
187
|
"""Add topics to the current group subscription.
|
|
183
188
|
|
|
@@ -191,6 +196,7 @@ class SubscriptionState(object):
|
|
|
191
196
|
raise Errors.IllegalStateError(self._SUBSCRIPTION_EXCEPTION_MESSAGE)
|
|
192
197
|
self._group_subscription.update(topics)
|
|
193
198
|
|
|
199
|
+
@synchronized
|
|
194
200
|
def reset_group_subscription(self):
|
|
195
201
|
"""Reset the group's subscription to only contain topics subscribed by this consumer."""
|
|
196
202
|
if not self.partitions_auto_assigned():
|
|
@@ -198,6 +204,7 @@ class SubscriptionState(object):
|
|
|
198
204
|
assert self.subscription is not None, 'Subscription required'
|
|
199
205
|
self._group_subscription.intersection_update(self.subscription)
|
|
200
206
|
|
|
207
|
+
@synchronized
|
|
201
208
|
def assign_from_user(self, partitions):
|
|
202
209
|
"""Manually assign a list of TopicPartitions to this consumer.
|
|
203
210
|
|
|
@@ -222,6 +229,7 @@ class SubscriptionState(object):
|
|
|
222
229
|
self._set_assignment({partition: self.assignment.get(partition, TopicPartitionState())
|
|
223
230
|
for partition in partitions})
|
|
224
231
|
|
|
232
|
+
@synchronized
|
|
225
233
|
def assign_from_subscribed(self, assignments):
|
|
226
234
|
"""Update the assignment to the specified partitions
|
|
227
235
|
|
|
@@ -258,6 +266,7 @@ class SubscriptionState(object):
|
|
|
258
266
|
for tp in topic_partitions[topic]:
|
|
259
267
|
self.assignment[tp] = partition_states[tp]
|
|
260
268
|
|
|
269
|
+
@synchronized
|
|
261
270
|
def unsubscribe(self):
|
|
262
271
|
"""Clear all topic subscriptions and partition assignments"""
|
|
263
272
|
self.subscription = None
|
|
@@ -266,6 +275,7 @@ class SubscriptionState(object):
|
|
|
266
275
|
self.subscribed_pattern = None
|
|
267
276
|
self.subscription_type = SubscriptionType.NONE
|
|
268
277
|
|
|
278
|
+
@synchronized
|
|
269
279
|
def group_subscription(self):
|
|
270
280
|
"""Get the topic subscription for the group.
|
|
271
281
|
|
|
@@ -281,6 +291,7 @@ class SubscriptionState(object):
|
|
|
281
291
|
"""
|
|
282
292
|
return self._group_subscription
|
|
283
293
|
|
|
294
|
+
@synchronized
|
|
284
295
|
def seek(self, partition, offset):
|
|
285
296
|
"""Manually specify the fetch offset for a TopicPartition.
|
|
286
297
|
|
|
@@ -298,15 +309,18 @@ class SubscriptionState(object):
|
|
|
298
309
|
raise TypeError("offset must be type in or OffsetAndMetadata")
|
|
299
310
|
self.assignment[partition].seek(offset)
|
|
300
311
|
|
|
312
|
+
@synchronized
|
|
301
313
|
def assigned_partitions(self):
|
|
302
314
|
"""Return set of TopicPartitions in current assignment."""
|
|
303
315
|
return set(self.assignment.keys())
|
|
304
316
|
|
|
317
|
+
@synchronized
|
|
305
318
|
def paused_partitions(self):
|
|
306
319
|
"""Return current set of paused TopicPartitions."""
|
|
307
320
|
return set(partition for partition in self.assignment
|
|
308
321
|
if self.is_paused(partition))
|
|
309
322
|
|
|
323
|
+
@synchronized
|
|
310
324
|
def fetchable_partitions(self):
|
|
311
325
|
"""Return ordered list of TopicPartitions that should be Fetched."""
|
|
312
326
|
fetchable = list()
|
|
@@ -315,10 +329,12 @@ class SubscriptionState(object):
|
|
|
315
329
|
fetchable.append(partition)
|
|
316
330
|
return fetchable
|
|
317
331
|
|
|
332
|
+
@synchronized
|
|
318
333
|
def partitions_auto_assigned(self):
|
|
319
334
|
"""Return True unless user supplied partitions manually."""
|
|
320
335
|
return self.subscription_type in (SubscriptionType.AUTO_TOPICS, SubscriptionType.AUTO_PATTERN)
|
|
321
336
|
|
|
337
|
+
@synchronized
|
|
322
338
|
def all_consumed_offsets(self):
|
|
323
339
|
"""Returns consumed offsets as {TopicPartition: OffsetAndMetadata}"""
|
|
324
340
|
all_consumed = {}
|
|
@@ -327,6 +343,7 @@ class SubscriptionState(object):
|
|
|
327
343
|
all_consumed[partition] = state.position
|
|
328
344
|
return all_consumed
|
|
329
345
|
|
|
346
|
+
@synchronized
|
|
330
347
|
def request_offset_reset(self, partition, offset_reset_strategy=None):
|
|
331
348
|
"""Mark partition for offset reset using specified or default strategy.
|
|
332
349
|
|
|
@@ -338,23 +355,28 @@ class SubscriptionState(object):
|
|
|
338
355
|
offset_reset_strategy = self._default_offset_reset_strategy
|
|
339
356
|
self.assignment[partition].reset(offset_reset_strategy)
|
|
340
357
|
|
|
358
|
+
@synchronized
|
|
341
359
|
def set_reset_pending(self, partitions, next_allowed_reset_time):
|
|
342
360
|
for partition in partitions:
|
|
343
361
|
self.assignment[partition].set_reset_pending(next_allowed_reset_time)
|
|
344
362
|
|
|
363
|
+
@synchronized
|
|
345
364
|
def has_default_offset_reset_policy(self):
|
|
346
365
|
"""Return True if default offset reset policy is Earliest or Latest"""
|
|
347
366
|
return self._default_offset_reset_strategy != OffsetResetStrategy.NONE
|
|
348
367
|
|
|
368
|
+
@synchronized
|
|
349
369
|
def is_offset_reset_needed(self, partition):
|
|
350
370
|
return self.assignment[partition].awaiting_reset
|
|
351
371
|
|
|
372
|
+
@synchronized
|
|
352
373
|
def has_all_fetch_positions(self):
|
|
353
374
|
for state in six.itervalues(self.assignment):
|
|
354
375
|
if not state.has_valid_position:
|
|
355
376
|
return False
|
|
356
377
|
return True
|
|
357
378
|
|
|
379
|
+
@synchronized
|
|
358
380
|
def missing_fetch_positions(self):
|
|
359
381
|
missing = set()
|
|
360
382
|
for partition, state in six.iteritems(self.assignment):
|
|
@@ -362,9 +384,11 @@ class SubscriptionState(object):
|
|
|
362
384
|
missing.add(partition)
|
|
363
385
|
return missing
|
|
364
386
|
|
|
387
|
+
@synchronized
|
|
365
388
|
def has_valid_position(self, partition):
|
|
366
389
|
return partition in self.assignment and self.assignment[partition].has_valid_position
|
|
367
390
|
|
|
391
|
+
@synchronized
|
|
368
392
|
def reset_missing_positions(self):
|
|
369
393
|
partitions_with_no_offsets = set()
|
|
370
394
|
for tp, state in six.iteritems(self.assignment):
|
|
@@ -377,6 +401,7 @@ class SubscriptionState(object):
|
|
|
377
401
|
if partitions_with_no_offsets:
|
|
378
402
|
raise Errors.NoOffsetForPartitionError(partitions_with_no_offsets)
|
|
379
403
|
|
|
404
|
+
@synchronized
|
|
380
405
|
def partitions_needing_reset(self):
|
|
381
406
|
partitions = set()
|
|
382
407
|
for tp, state in six.iteritems(self.assignment):
|
|
@@ -384,25 +409,32 @@ class SubscriptionState(object):
|
|
|
384
409
|
partitions.add(tp)
|
|
385
410
|
return partitions
|
|
386
411
|
|
|
412
|
+
@synchronized
|
|
387
413
|
def is_assigned(self, partition):
|
|
388
414
|
return partition in self.assignment
|
|
389
415
|
|
|
416
|
+
@synchronized
|
|
390
417
|
def is_paused(self, partition):
|
|
391
418
|
return partition in self.assignment and self.assignment[partition].paused
|
|
392
419
|
|
|
420
|
+
@synchronized
|
|
393
421
|
def is_fetchable(self, partition):
|
|
394
422
|
return partition in self.assignment and self.assignment[partition].is_fetchable()
|
|
395
423
|
|
|
424
|
+
@synchronized
|
|
396
425
|
def pause(self, partition):
|
|
397
426
|
self.assignment[partition].pause()
|
|
398
427
|
|
|
428
|
+
@synchronized
|
|
399
429
|
def resume(self, partition):
|
|
400
430
|
self.assignment[partition].resume()
|
|
401
431
|
|
|
432
|
+
@synchronized
|
|
402
433
|
def reset_failed(self, partitions, next_retry_time):
|
|
403
434
|
for partition in partitions:
|
|
404
435
|
self.assignment[partition].reset_failed(next_retry_time)
|
|
405
436
|
|
|
437
|
+
@synchronized
|
|
406
438
|
def move_partition_to_end(self, partition):
|
|
407
439
|
if partition in self.assignment:
|
|
408
440
|
try:
|
|
@@ -411,6 +443,7 @@ class SubscriptionState(object):
|
|
|
411
443
|
state = self.assignment.pop(partition)
|
|
412
444
|
self.assignment[partition] = state
|
|
413
445
|
|
|
446
|
+
@synchronized
|
|
414
447
|
def position(self, partition):
|
|
415
448
|
return self.assignment[partition].position
|
|
416
449
|
|
|
@@ -30,7 +30,7 @@ class Percentiles(AbstractSampledStat, AbstractCompoundStat):
|
|
|
30
30
|
' to be 0.0.')
|
|
31
31
|
self.bin_scheme = Histogram.LinearBinScheme(self._buckets, max_val)
|
|
32
32
|
else:
|
|
33
|
-
ValueError('Unknown bucket type: %s' % (bucketing,))
|
|
33
|
+
raise ValueError('Unknown bucket type: %s' % (bucketing,))
|
|
34
34
|
|
|
35
35
|
def stats(self):
|
|
36
36
|
measurables = []
|
kafka/producer/kafka.py
CHANGED
|
@@ -960,9 +960,11 @@ class KafkaProducer(object):
|
|
|
960
960
|
future.add_both(lambda e, *args: e.set(), metadata_event)
|
|
961
961
|
self._sender.wakeup()
|
|
962
962
|
metadata_event.wait(timer.timeout_ms / 1000)
|
|
963
|
-
if not
|
|
963
|
+
if not future.is_done:
|
|
964
964
|
raise Errors.KafkaTimeoutError(
|
|
965
965
|
"Failed to update metadata after %.1f secs." % (max_wait_ms / 1000,))
|
|
966
|
+
elif future.failed() and not future.retriable():
|
|
967
|
+
raise future.exception
|
|
966
968
|
elif topic in self._metadata.unauthorized_topics:
|
|
967
969
|
raise Errors.TopicAuthorizationFailedError(set([topic]))
|
|
968
970
|
else:
|
kafka/sasl/gssapi.py
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from __future__ import absolute_import
|
|
2
2
|
|
|
3
|
+
import struct
|
|
4
|
+
|
|
3
5
|
# needed for SASL_GSSAPI authentication:
|
|
4
6
|
try:
|
|
5
7
|
import gssapi
|
|
@@ -68,8 +70,8 @@ class SaslMechanismGSSAPI(SaslMechanism):
|
|
|
68
70
|
client_flags = self.SASL_QOP_AUTH
|
|
69
71
|
server_flags = msg[0]
|
|
70
72
|
message_parts = [
|
|
71
|
-
|
|
72
|
-
msg[:
|
|
73
|
+
struct.Struct('>b').pack(client_flags & server_flags),
|
|
74
|
+
msg[1:],
|
|
73
75
|
self.auth_id.encode('utf-8'),
|
|
74
76
|
]
|
|
75
77
|
# add authorization identity to the response, and GSS-wrap
|
kafka/sasl/msk.py
CHANGED
|
@@ -4,6 +4,7 @@ import datetime
|
|
|
4
4
|
import hashlib
|
|
5
5
|
import hmac
|
|
6
6
|
import json
|
|
7
|
+
import logging
|
|
7
8
|
import string
|
|
8
9
|
|
|
9
10
|
# needed for AWS_MSK_IAM authentication:
|
|
@@ -13,10 +14,14 @@ except ImportError:
|
|
|
13
14
|
# no botocore available, will disable AWS_MSK_IAM mechanism
|
|
14
15
|
BotoSession = None
|
|
15
16
|
|
|
17
|
+
from kafka.errors import KafkaConfigurationError
|
|
16
18
|
from kafka.sasl.abc import SaslMechanism
|
|
17
19
|
from kafka.vendor.six.moves import urllib
|
|
18
20
|
|
|
19
21
|
|
|
22
|
+
log = logging.getLogger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
20
25
|
class SaslMechanismAwsMskIam(SaslMechanism):
|
|
21
26
|
def __init__(self, **config):
|
|
22
27
|
assert BotoSession is not None, 'AWS_MSK_IAM requires the "botocore" package'
|
|
@@ -27,22 +32,28 @@ class SaslMechanismAwsMskIam(SaslMechanism):
|
|
|
27
32
|
self._is_done = False
|
|
28
33
|
self._is_authenticated = False
|
|
29
34
|
|
|
30
|
-
def
|
|
35
|
+
def _build_client(self):
|
|
31
36
|
session = BotoSession()
|
|
32
37
|
credentials = session.get_credentials().get_frozen_credentials()
|
|
33
|
-
|
|
38
|
+
if not session.get_config_variable('region'):
|
|
39
|
+
raise KafkaConfigurationError('Unable to determine region for AWS MSK cluster. Is AWS_DEFAULT_REGION set?')
|
|
40
|
+
return AwsMskIamClient(
|
|
34
41
|
host=self.host,
|
|
35
42
|
access_key=credentials.access_key,
|
|
36
43
|
secret_key=credentials.secret_key,
|
|
37
44
|
region=session.get_config_variable('region'),
|
|
38
45
|
token=credentials.token,
|
|
39
46
|
)
|
|
47
|
+
|
|
48
|
+
def auth_bytes(self):
|
|
49
|
+
client = self._build_client()
|
|
50
|
+
log.debug("Generating auth token for MSK scope: %s", client._scope)
|
|
40
51
|
return client.first_message()
|
|
41
52
|
|
|
42
53
|
def receive(self, auth_bytes):
|
|
43
54
|
self._is_done = True
|
|
44
55
|
self._is_authenticated = auth_bytes != b''
|
|
45
|
-
self._auth = auth_bytes.
|
|
56
|
+
self._auth = auth_bytes.decode('utf-8')
|
|
46
57
|
|
|
47
58
|
def is_done(self):
|
|
48
59
|
return self._is_done
|
kafka/util.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import absolute_import, division
|
|
2
2
|
|
|
3
3
|
import binascii
|
|
4
|
+
import functools
|
|
4
5
|
import re
|
|
5
6
|
import time
|
|
6
7
|
import weakref
|
|
@@ -129,3 +130,11 @@ class Dict(dict):
|
|
|
129
130
|
See: https://docs.python.org/2/library/weakref.html
|
|
130
131
|
"""
|
|
131
132
|
pass
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def synchronized(func):
|
|
136
|
+
def wrapper(self, *args, **kwargs):
|
|
137
|
+
with self._lock:
|
|
138
|
+
return func(self, *args, **kwargs)
|
|
139
|
+
functools.update_wrapper(wrapper, func)
|
|
140
|
+
return wrapper
|
kafka/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.2.
|
|
1
|
+
__version__ = '2.2.12'
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
kafka/__init__.py,sha256=4dvHKZAxmD_4tfJ5wGcRV2X78vPcm8vsUoqceULevjA,1077
|
|
2
2
|
kafka/client_async.py,sha256=R8q_rRpG3RrYrRmcZo7XgO2oSdpLJATNcq8w-1vIJ_8,56878
|
|
3
|
-
kafka/cluster.py,sha256=
|
|
3
|
+
kafka/cluster.py,sha256=B4tOZYhZaYrcGsyAtdA8yejFm9ue7ElJxn_pd6Xhdfk,16775
|
|
4
4
|
kafka/codec.py,sha256=8NZpnehzNrhSBIjzbPVSvyFbSeLAqEntE7BfVHu-_9I,10036
|
|
5
5
|
kafka/conn.py,sha256=_yP-pGwEbkDmeutMOZjVilQXAnF4PWF_CDc60qC3DuE,69488
|
|
6
6
|
kafka/errors.py,sha256=qX2Fp0qawU_HBNcZCwB7EDCmx3C2PehrETi6qSEJHmk,33290
|
|
7
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
|
-
kafka/util.py,sha256=
|
|
11
|
-
kafka/version.py,sha256=
|
|
10
|
+
kafka/util.py,sha256=WGqI5yT1yWGgHqSuRF9Fi8ejpiB53SurMy7ABkYxJ2g,4584
|
|
11
|
+
kafka/version.py,sha256=EBt4fvLDhAuvi15MopL2T2nwet-L-b70fQH-prDFnN8,23
|
|
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
|
|
@@ -23,9 +23,9 @@ kafka/benchmarks/record_batch_compose.py,sha256=CnUreNg1lUT0Qx9enmSr-THmBl9PjVMf
|
|
|
23
23
|
kafka/benchmarks/record_batch_read.py,sha256=vlFaWU2YWI379n_2M8qieb_S2uHUWKV0NquEYy5b-Ho,2184
|
|
24
24
|
kafka/benchmarks/varint_speed.py,sha256=s4CuvKgDZL-_zna5E3vM8RgHjhXuW6pcaO1z1WYZ_0Y,12585
|
|
25
25
|
kafka/consumer/__init__.py,sha256=NDdvtyuJgFyQZahqL9i5sYXGP6rOMIXWwHQEaZ1fCcs,122
|
|
26
|
-
kafka/consumer/fetcher.py,sha256=
|
|
26
|
+
kafka/consumer/fetcher.py,sha256=OvKKC8lZCWJZaeT6EfHwr4-7_noN82yWPxcQB8v5l4Q,69132
|
|
27
27
|
kafka/consumer/group.py,sha256=oieWNHM1NWiOZT8pasOLfFJAbmJEXJ4h7PgUtklxo_Q,58944
|
|
28
|
-
kafka/consumer/subscription_state.py,sha256=
|
|
28
|
+
kafka/consumer/subscription_state.py,sha256=bK-YTVbOzhy8OB206QAfXVuo7zPA9YqYXnrRRST369c,24289
|
|
29
29
|
kafka/coordinator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
30
|
kafka/coordinator/base.py,sha256=NmHXyqoJZVXL2KhahXLCOH1zVx9gyTdhrt-_unxIAaE,54365
|
|
31
31
|
kafka/coordinator/consumer.py,sha256=le4bGbHfrDK4pperYXekPKzuZW576uXL324IOwS4Kmw,46348
|
|
@@ -58,7 +58,7 @@ kafka/metrics/stats/histogram.py,sha256=5jNlZHOnHvGOpho-Zm0Rna6GcHy-CYjxPe612B5D
|
|
|
58
58
|
kafka/metrics/stats/max_stat.py,sha256=n_90jTiHCgF193OCu2wtjUlJJxSkldW336OyEAexbv0,606
|
|
59
59
|
kafka/metrics/stats/min_stat.py,sha256=xKzBc3tQjk4ieiGdvs9HqKn885mPV6yaDxCb2ANye8c,628
|
|
60
60
|
kafka/metrics/stats/percentile.py,sha256=RkBL4L1AIBL5Mp74xIOt5lYJol4PSLNYmROcpD9bMb0,391
|
|
61
|
-
kafka/metrics/stats/percentiles.py,sha256=
|
|
61
|
+
kafka/metrics/stats/percentiles.py,sha256=9aYsUwZO6h-uqsYnx8ob9biWwWJ-ztRDwTZ8AXVRI3w,3027
|
|
62
62
|
kafka/metrics/stats/rate.py,sha256=5vvGCUyqZF7QDeUtVu0g37UVRavkwqdRc7DldKlMGn0,4628
|
|
63
63
|
kafka/metrics/stats/sampled_stat.py,sha256=zO9HwoJFZvuuDWj_OdckPeVpxUxhR5dhRXcLTL0-hUQ,3556
|
|
64
64
|
kafka/metrics/stats/sensor.py,sha256=xQsbt3cqcBkJr9ccAkFabWgh9pdeMzggYSjhiStvAdo,5317
|
|
@@ -67,7 +67,7 @@ kafka/partitioner/__init__.py,sha256=Fks3C5_kokVWYw1Ad5wv0sVVzaaBtOejL-2bIL1yRII
|
|
|
67
67
|
kafka/partitioner/default.py,sha256=tW-RC1PWIPRDEbeEAaPTLn-00oiZnXoVouEk9AnYE4w,2879
|
|
68
68
|
kafka/producer/__init__.py,sha256=i3Wxih0NHjmqCkRNE54ial8fBp9siqabUE6ZGyL6oX8,122
|
|
69
69
|
kafka/producer/future.py,sha256=UC3-g9QlgVFmbitrtMXVpeP0Pbvr7xl2kcw6bAehKG8,2983
|
|
70
|
-
kafka/producer/kafka.py,sha256
|
|
70
|
+
kafka/producer/kafka.py,sha256=oGO-UxoVZEFdBLOQ7zEqeDJWXMxKyUdNV-pCRU3jZmg,53302
|
|
71
71
|
kafka/producer/record_accumulator.py,sha256=dhJW2vxiEDxsws0xRQ5REIrt3lLNu1g0R7HIMs6pZOY,28172
|
|
72
72
|
kafka/producer/sender.py,sha256=8-TLTw6vQO7AheWSDPI33cQdWMyTDxi1k-pkXuUb9k0,37789
|
|
73
73
|
kafka/producer/transaction_manager.py,sha256=HNfJNZwNfJtYdftn9SeaDfi7I5MKk0LD3sK64inuPt0,41537
|
|
@@ -107,8 +107,8 @@ kafka/record/memory_records.py,sha256=b7RFxvaQ93drXSk3o3_YB3FQlVoESoBlGj3Z5PD25n
|
|
|
107
107
|
kafka/record/util.py,sha256=LDajBWdYVetmXts_t9Q76CxEx7njgC9LnjMgz9yPEMM,3556
|
|
108
108
|
kafka/sasl/__init__.py,sha256=wUUGIKRe52J6Qekj7hSypg44vWTrkYsEdVafQC7cX5s,1106
|
|
109
109
|
kafka/sasl/abc.py,sha256=R0BZOk3AYEGyehiGbbg-LMRvFAlWZsh0fBiESgUpBYw,657
|
|
110
|
-
kafka/sasl/gssapi.py,sha256=
|
|
111
|
-
kafka/sasl/msk.py,sha256=
|
|
110
|
+
kafka/sasl/gssapi.py,sha256=Q8bZ5J2Ap8aJc-P0EFIPeQSgsUkOxO8a_FJs5eZcZGA,4625
|
|
111
|
+
kafka/sasl/msk.py,sha256=FCv0uUTQKjvR2gIGyiv-dlwIvkpvEtaHvhqhXtC2q8w,8101
|
|
112
112
|
kafka/sasl/oauth.py,sha256=dh87tVi-dlS5lIzgYsC4m7IXUhlLdejaMb9Ua6oYaB0,3425
|
|
113
113
|
kafka/sasl/plain.py,sha256=PMfoWT856wx6nF_LhpfPKEnD7BRNx5l6rDhAqxBnMWU,1317
|
|
114
114
|
kafka/sasl/scram.py,sha256=77If2o9x-QZDBs2fqml17S-wGyR5YkOMr2nZxXrCW9c,5045
|
|
@@ -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.
|
|
124
|
-
kafka_python-2.2.
|
|
125
|
-
kafka_python-2.2.
|
|
126
|
-
kafka_python-2.2.
|
|
123
|
+
kafka_python-2.2.12.dist-info/METADATA,sha256=VY0AcenXCIui_o-61DWJSPBPKXgRW5A4nFljAxfCtTQ,9952
|
|
124
|
+
kafka_python-2.2.12.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
125
|
+
kafka_python-2.2.12.dist-info/top_level.txt,sha256=IivJz7l5WHdLNDT6RIiVAlhjQzYRwGqBBmKHZ7WjPeM,6
|
|
126
|
+
kafka_python-2.2.12.dist-info/RECORD,,
|
|
File without changes
|