ruby-kafka 0.3.14 → 0.3.15.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/kafka.rb +13 -0
- data/lib/kafka/consumer.rb +46 -5
- data/lib/kafka/offset_manager.rb +2 -0
- data/lib/kafka/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f737e31dc809145f5ea7d5d66d761df383103215
|
4
|
+
data.tar.gz: 82e1bb74dd93e01963c8ccff60ea4e26a27d24f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cca8d29dd690134e46833d3cd01e961c4c782c540f88472619edc4e9e9af6e273c5dbafbc5fd5df31856fce3f2550f2c0e3f1924372a86aa67cfbdb87120e7f
|
7
|
+
data.tar.gz: 269d7ff9dfbc342a8b942249889c55d8ddb9ca4a06e18003727537fd00dcda09a42e714626fa4045554de76c0a52fdafb3694b702c39446753016a1fa0cfba85
|
data/CHANGELOG.md
CHANGED
data/lib/kafka.rb
CHANGED
@@ -4,6 +4,19 @@ module Kafka
|
|
4
4
|
class Error < StandardError
|
5
5
|
end
|
6
6
|
|
7
|
+
# There was an error processing a message.
|
8
|
+
class ProcessingError < Error
|
9
|
+
attr_reader :topic, :partition, :offset
|
10
|
+
|
11
|
+
def initialize(topic, partition, offset)
|
12
|
+
@topic = topic
|
13
|
+
@partition = partition
|
14
|
+
@offset = offset
|
15
|
+
|
16
|
+
super()
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
7
20
|
# Subclasses of this exception class map to an error code described in the
|
8
21
|
# Kafka protocol specification.
|
9
22
|
#
|
data/lib/kafka/consumer.rb
CHANGED
@@ -52,6 +52,9 @@ module Kafka
|
|
52
52
|
@session_timeout = session_timeout
|
53
53
|
@heartbeat = heartbeat
|
54
54
|
|
55
|
+
# A list of partitions that have been paused, per topic.
|
56
|
+
@paused_partitions = {}
|
57
|
+
|
55
58
|
# Whether or not the consumer is currently consuming messages.
|
56
59
|
@running = false
|
57
60
|
|
@@ -63,7 +66,7 @@ module Kafka
|
|
63
66
|
#
|
64
67
|
# Typically you either want to start reading messages from the very
|
65
68
|
# beginning of the topic's partitions or you simply want to wait for new
|
66
|
-
# messages to be written. In the former case, set `
|
69
|
+
# messages to be written. In the former case, set `start_from_beginning`
|
67
70
|
# true (the default); in the latter, set it to false.
|
68
71
|
#
|
69
72
|
# @param topic [String] the name of the topic to subscribe to.
|
@@ -91,6 +94,41 @@ module Kafka
|
|
91
94
|
@running = false
|
92
95
|
end
|
93
96
|
|
97
|
+
# Pause processing of a specific topic partition.
|
98
|
+
#
|
99
|
+
# When a specific message causes the processor code to fail, it can be a good
|
100
|
+
# idea to simply pause the partition until the error can be resolved, allowing
|
101
|
+
# the rest of the partitions to continue being processed.
|
102
|
+
#
|
103
|
+
# @param topic [String]
|
104
|
+
# @param partition [Integer]
|
105
|
+
# @return [nil]
|
106
|
+
def pause(topic, partition)
|
107
|
+
@paused_partitions[topic] ||= Set.new
|
108
|
+
@paused_partitions[topic] << partition
|
109
|
+
end
|
110
|
+
|
111
|
+
# Resume processing of a topic partition.
|
112
|
+
#
|
113
|
+
# @see #pause
|
114
|
+
# @param topic [String]
|
115
|
+
# @param partition [Integer]
|
116
|
+
# @return [nil]
|
117
|
+
def resume(topic, partition)
|
118
|
+
paused_partitions = @paused_partitions.fetch(topic, [])
|
119
|
+
paused_partitions.delete(partition)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Whether the topic partition is currently paused.
|
123
|
+
#
|
124
|
+
# @see #pause
|
125
|
+
# @param topic [String]
|
126
|
+
# @param partition [Integer]
|
127
|
+
# @return [Boolean] true if the partition is paused, false otherwise.
|
128
|
+
def paused?(topic, partition)
|
129
|
+
@paused_partitions.fetch(topic, []).include?(partition)
|
130
|
+
end
|
131
|
+
|
94
132
|
# Fetches and enumerates the messages in the topics that the consumer group
|
95
133
|
# subscribes to.
|
96
134
|
#
|
@@ -132,7 +170,7 @@ module Kafka
|
|
132
170
|
backtrace = e.backtrace.join("\n")
|
133
171
|
@logger.error "Exception raised when processing #{location} -- #{e.class}: #{e}\n#{backtrace}"
|
134
172
|
|
135
|
-
raise
|
173
|
+
raise ProcessingError.new(message.topic, message.partition, message.offset)
|
136
174
|
end
|
137
175
|
end
|
138
176
|
|
@@ -274,9 +312,12 @@ module Kafka
|
|
274
312
|
offset = @offset_manager.next_offset_for(topic, partition)
|
275
313
|
max_bytes = @max_bytes.fetch(topic)
|
276
314
|
|
277
|
-
|
278
|
-
|
279
|
-
|
315
|
+
if paused?(topic, partition)
|
316
|
+
@logger.warn "Partition #{topic}/#{partition} is currently paused, skipping"
|
317
|
+
else
|
318
|
+
@logger.debug "Fetching batch from #{topic}/#{partition} starting at offset #{offset}"
|
319
|
+
operation.fetch_from_partition(topic, partition, offset: offset, max_bytes: max_bytes)
|
320
|
+
end
|
280
321
|
end
|
281
322
|
end
|
282
323
|
|
data/lib/kafka/offset_manager.rb
CHANGED
@@ -71,6 +71,7 @@ module Kafka
|
|
71
71
|
|
72
72
|
def clear_offsets
|
73
73
|
@processed_offsets.clear
|
74
|
+
@resolved_offsets.clear
|
74
75
|
|
75
76
|
# Clear the cached commits from the brokers.
|
76
77
|
@committed_offsets = nil
|
@@ -86,6 +87,7 @@ module Kafka
|
|
86
87
|
|
87
88
|
# Clear the cached commits from the brokers.
|
88
89
|
@committed_offsets = nil
|
90
|
+
@resolved_offsets.clear
|
89
91
|
end
|
90
92
|
|
91
93
|
private
|
data/lib/kafka/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-kafka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.15.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schierbeck
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -303,9 +303,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
303
303
|
version: 2.1.0
|
304
304
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
305
305
|
requirements:
|
306
|
-
- - "
|
306
|
+
- - ">"
|
307
307
|
- !ruby/object:Gem::Version
|
308
|
-
version:
|
308
|
+
version: 1.3.1
|
309
309
|
requirements: []
|
310
310
|
rubyforge_project:
|
311
311
|
rubygems_version: 2.4.5.1
|