@@ -53,6 +53,7 @@ def assert_message_count(self, messages, num_messages):
53
53
def consumer (self , ** kwargs ):
54
54
if os .environ ['KAFKA_VERSION' ] == "0.8.0" :
55
55
# Kafka 0.8.0 simply doesn't support offset requests, so hard code it being off
56
+ kwargs ['group' ] = None
56
57
kwargs ['auto_commit' ] = False
57
58
else :
58
59
kwargs .setdefault ('auto_commit' , True )
@@ -127,6 +128,23 @@ def test_simple_consumer_no_reset(self):
127
128
with self .assertRaises (OffsetOutOfRangeError ):
128
129
consumer .get_message ()
129
130
131
+ @kafka_versions ("0.8.1" , "0.8.1.1" , "0.8.2.0" )
132
+ def test_simple_consumer_load_initial_offsets (self ):
133
+ self .send_messages (0 , range (0 , 100 ))
134
+ self .send_messages (1 , range (100 , 200 ))
135
+
136
+ # Create 1st consumer and change offsets
137
+ consumer = self .consumer ()
138
+ self .assertEqual (consumer .offsets , {0 : 0 , 1 : 0 })
139
+ consumer .offsets .update ({0 :51 , 1 :101 })
140
+ # Update counter after manual offsets update
141
+ consumer .count_since_commit += 1
142
+ consumer .commit ()
143
+
144
+ # Create 2nd consumer and check initial offsets
145
+ consumer = self .consumer (auto_commit = False )
146
+ self .assertEqual (consumer .offsets , {0 : 51 , 1 : 101 })
147
+
130
148
@kafka_versions ("all" )
131
149
def test_simple_consumer__seek (self ):
132
150
self .send_messages (0 , range (0 , 100 ))
@@ -243,7 +261,9 @@ def test_multi_proc_pending(self):
243
261
self .send_messages (0 , range (0 , 10 ))
244
262
self .send_messages (1 , range (10 , 20 ))
245
263
246
- consumer = MultiProcessConsumer (self .client , "group1" , self .topic ,
264
+ # set group to None and auto_commit to False to avoid interactions w/
265
+ # offset commit/fetch apis
266
+ consumer = MultiProcessConsumer (self .client , None , self .topic ,
247
267
auto_commit = False , iter_timeout = 0 )
248
268
249
269
self .assertEqual (consumer .pending (), 20 )
@@ -252,6 +272,24 @@ def test_multi_proc_pending(self):
252
272
253
273
consumer .stop ()
254
274
275
+ @kafka_versions ("0.8.1" , "0.8.1.1" , "0.8.2.0" )
276
+ def test_multi_process_consumer_load_initial_offsets (self ):
277
+ self .send_messages (0 , range (0 , 10 ))
278
+ self .send_messages (1 , range (10 , 20 ))
279
+
280
+ # Create 1st consumer and change offsets
281
+ consumer = self .consumer ()
282
+ self .assertEqual (consumer .offsets , {0 : 0 , 1 : 0 })
283
+ consumer .offsets .update ({0 :5 , 1 :15 })
284
+ # Update counter after manual offsets update
285
+ consumer .count_since_commit += 1
286
+ consumer .commit ()
287
+
288
+ # Create 2nd consumer and check initial offsets
289
+ consumer = self .consumer (consumer = MultiProcessConsumer ,
290
+ auto_commit = False )
291
+ self .assertEqual (consumer .offsets , {0 : 5 , 1 : 15 })
292
+
255
293
@kafka_versions ("all" )
256
294
def test_large_messages (self ):
257
295
# Produce 10 "normal" size messages
@@ -327,6 +365,41 @@ def test_offset_behavior__resuming_behavior(self):
327
365
consumer1 .stop ()
328
366
consumer2 .stop ()
329
367
368
+ @kafka_versions ("0.8.1" , "0.8.1.1" , "0.8.2.0" )
369
+ def test_multi_process_offset_behavior__resuming_behavior (self ):
370
+ self .send_messages (0 , range (0 , 100 ))
371
+ self .send_messages (1 , range (100 , 200 ))
372
+
373
+ # Start a consumer
374
+ consumer1 = self .consumer (
375
+ consumer = MultiProcessConsumer ,
376
+ auto_commit_every_t = None ,
377
+ auto_commit_every_n = 20 ,
378
+ )
379
+
380
+ # Grab the first 195 messages
381
+ output_msgs1 = []
382
+ idx = 0
383
+ for message in consumer1 :
384
+ output_msgs1 .append (message .message .value )
385
+ idx += 1
386
+ if idx >= 195 :
387
+ break
388
+ self .assert_message_count (output_msgs1 , 195 )
389
+
390
+ # The total offset across both partitions should be at 180
391
+ consumer2 = self .consumer (
392
+ consumer = MultiProcessConsumer ,
393
+ auto_commit_every_t = None ,
394
+ auto_commit_every_n = 20 ,
395
+ )
396
+
397
+ # 181-200
398
+ self .assert_message_count ([ message for message in consumer2 ], 20 )
399
+
400
+ consumer1 .stop ()
401
+ consumer2 .stop ()
402
+
330
403
# TODO: Make this a unit test -- should not require integration
331
404
@kafka_versions ("all" )
332
405
def test_fetch_buffer_size (self ):
0 commit comments