Skip to content

Commit e298081

Browse files
author
Dana Powers
committed
Support optional partitions kwarg in MultiProcessConsumer
1 parent 67424a2 commit e298081

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

kafka/consumer/multiprocess.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class MultiProcessConsumer(Consumer):
9898
topic: the topic to consume
9999
100100
Keyword Arguments:
101+
partitions: An optional list of partitions to consume the data from
101102
auto_commit: default True. Whether or not to auto commit the offsets
102103
auto_commit_every_n: default 100. How many messages to consume
103104
before a commit
@@ -114,16 +115,19 @@ class MultiProcessConsumer(Consumer):
114115
commit method on this class. A manual call to commit will also reset
115116
these triggers
116117
"""
117-
def __init__(self, client, group, topic, auto_commit=True,
118+
def __init__(self, client, group, topic,
119+
partitions=None,
120+
auto_commit=True,
118121
auto_commit_every_n=AUTO_COMMIT_MSG_COUNT,
119122
auto_commit_every_t=AUTO_COMMIT_INTERVAL,
120-
num_procs=1, partitions_per_proc=0,
123+
num_procs=1,
124+
partitions_per_proc=0,
121125
**simple_consumer_options):
122126

123127
# Initiate the base consumer class
124128
super(MultiProcessConsumer, self).__init__(
125129
client, group, topic,
126-
partitions=None,
130+
partitions=partitions,
127131
auto_commit=auto_commit,
128132
auto_commit_every_n=auto_commit_every_n,
129133
auto_commit_every_t=auto_commit_every_t)

test/test_consumer.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

2-
from mock import MagicMock
2+
from mock import MagicMock, patch
33
from . import unittest
44

5-
from kafka import SimpleConsumer, KafkaConsumer
5+
from kafka import SimpleConsumer, KafkaConsumer, MultiProcessConsumer
66
from kafka.common import KafkaConfigurationError
77

88
class TestKafkaConsumer(unittest.TestCase):
@@ -13,3 +13,12 @@ def test_non_integer_partitions(self):
1313
def test_broker_list_required(self):
1414
with self.assertRaises(KafkaConfigurationError):
1515
KafkaConsumer()
16+
17+
class TestMultiProcessConsumer(unittest.TestCase):
18+
def test_partition_list(self):
19+
client = MagicMock()
20+
partitions = (0,)
21+
with patch.object(MultiProcessConsumer, 'fetch_last_known_offsets') as fetch_last_known_offsets:
22+
consumer = MultiProcessConsumer(client, 'testing-group', 'testing-topic', partitions=partitions)
23+
self.assertEqual(fetch_last_known_offsets.call_args[0], (partitions,) )
24+
self.assertEqual(client.get_partition_ids_for_topic.call_count, 0) # pylint: disable=no-member

0 commit comments

Comments
 (0)