ruby-kafka 0.3.13.beta1 → 0.3.13.beta2
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.
- checksums.yaml +4 -4
- data/lib/kafka/async_producer.rb +2 -2
- data/lib/kafka/connection.rb +5 -25
- data/lib/kafka/consumer.rb +9 -2
- data/lib/kafka/datadog.rb +14 -2
- data/lib/kafka/producer.rb +5 -2
- data/lib/kafka/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a1680eaa22189f9b23bcbca4789e3fd1ae59f16
|
4
|
+
data.tar.gz: 4bac9d11016756832446f01977bc64eea2ed6c16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3fa4970596e7f62155769a63103cfac3410ab234baf4a539620408f2704bd4e29b2e0977cf507cb3972c0788306aabf339334a90218f130a64dbdac64378eae
|
7
|
+
data.tar.gz: 7fd63b898166156713276a8d792e29af19a1764c9c27e97651ee267a7f11e10e07fcdc8807dea79d664e2c4e6248e9250b2e3cb85b1c0d41b127e73c1e6d65e2
|
data/lib/kafka/async_producer.rb
CHANGED
@@ -153,11 +153,11 @@ module Kafka
|
|
153
153
|
end
|
154
154
|
|
155
155
|
def buffer_overflow(topic)
|
156
|
-
@instrumenter.instrument("buffer_overflow.
|
156
|
+
@instrumenter.instrument("buffer_overflow.async_producer", {
|
157
157
|
topic: topic,
|
158
158
|
})
|
159
159
|
|
160
|
-
@logger.error "
|
160
|
+
@logger.error "Cannot produce message to #{topic}, max queue size (#{@max_queue_size}) reached"
|
161
161
|
|
162
162
|
raise BufferOverflow
|
163
163
|
end
|
data/lib/kafka/connection.rb
CHANGED
@@ -118,16 +118,11 @@ module Kafka
|
|
118
118
|
rescue Errno::ETIMEDOUT => e
|
119
119
|
@logger.error "Timed out while trying to connect to #{self}: #{e}"
|
120
120
|
raise ConnectionError, e
|
121
|
-
rescue SocketError, Errno::ECONNREFUSED => e
|
121
|
+
rescue SocketError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
122
122
|
@logger.error "Failed to connect to #{self}: #{e}"
|
123
123
|
raise ConnectionError, e
|
124
124
|
end
|
125
125
|
|
126
|
-
def reopen
|
127
|
-
close
|
128
|
-
open
|
129
|
-
end
|
130
|
-
|
131
126
|
# Writes a request over the connection.
|
132
127
|
#
|
133
128
|
# @param request [#encode] the request that should be encoded and written.
|
@@ -145,29 +140,14 @@ module Kafka
|
|
145
140
|
)
|
146
141
|
|
147
142
|
data = Kafka::Protocol::Encoder.encode_with(message)
|
148
|
-
retried = false
|
149
143
|
notification[:request_size] = data.bytesize
|
150
144
|
|
151
|
-
|
152
|
-
@encoder.write_bytes(data)
|
153
|
-
rescue Errno::ETIMEDOUT
|
154
|
-
@logger.error "Timed out while writing request #{@correlation_id}"
|
155
|
-
raise
|
156
|
-
rescue Errno::EPIPE, Errno::ECONNRESET, EOFError
|
157
|
-
# Kafka brokers automatically close client connections after a period of
|
158
|
-
# inactivity. If this has happened, it's safe to re-open the connection
|
159
|
-
# and retry the request.
|
160
|
-
if retried
|
161
|
-
raise
|
162
|
-
else
|
163
|
-
@logger.warn "Connection has been closed by the server, retrying..."
|
164
|
-
retried = true
|
165
|
-
reopen
|
166
|
-
retry
|
167
|
-
end
|
168
|
-
end
|
145
|
+
@encoder.write_bytes(data)
|
169
146
|
|
170
147
|
nil
|
148
|
+
rescue Errno::ETIMEDOUT
|
149
|
+
@logger.error "Timed out while writing request #{@correlation_id}"
|
150
|
+
raise
|
171
151
|
end
|
172
152
|
|
173
153
|
# Reads a response from the connection.
|
data/lib/kafka/consumer.rb
CHANGED
@@ -54,6 +54,9 @@ module Kafka
|
|
54
54
|
|
55
55
|
# Whether or not the consumer is currently consuming messages.
|
56
56
|
@running = false
|
57
|
+
|
58
|
+
# The maximum number of bytes to fetch from a single partition, by topic.
|
59
|
+
@max_bytes = {}
|
57
60
|
end
|
58
61
|
|
59
62
|
# Subscribes the consumer to a topic.
|
@@ -71,12 +74,15 @@ module Kafka
|
|
71
74
|
# only applies when first consuming a topic partition – once the consumer
|
72
75
|
# has checkpointed its progress, it will always resume from the last
|
73
76
|
# checkpoint.
|
77
|
+
# @param max_bytes_per_partition [Integer] the maximum amount of data fetched
|
78
|
+
# from a single partition at a time.
|
74
79
|
# @return [nil]
|
75
|
-
def subscribe(topic, default_offset: nil, start_from_beginning: true)
|
80
|
+
def subscribe(topic, default_offset: nil, start_from_beginning: true, max_bytes_per_partition: 1048576)
|
76
81
|
default_offset ||= start_from_beginning ? :earliest : :latest
|
77
82
|
|
78
83
|
@group.subscribe(topic)
|
79
84
|
@offset_manager.set_default_offset(topic, default_offset)
|
85
|
+
@max_bytes[topic] = max_bytes_per_partition
|
80
86
|
|
81
87
|
nil
|
82
88
|
end
|
@@ -248,10 +254,11 @@ module Kafka
|
|
248
254
|
assigned_partitions.each do |topic, partitions|
|
249
255
|
partitions.each do |partition|
|
250
256
|
offset = @offset_manager.next_offset_for(topic, partition)
|
257
|
+
max_bytes = @max_bytes.fetch(topic)
|
251
258
|
|
252
259
|
@logger.debug "Fetching batch from #{topic}/#{partition} starting at offset #{offset}"
|
253
260
|
|
254
|
-
operation.fetch_from_partition(topic, partition, offset: offset)
|
261
|
+
operation.fetch_from_partition(topic, partition, offset: offset, max_bytes: max_bytes)
|
255
262
|
end
|
256
263
|
end
|
257
264
|
|
data/lib/kafka/datadog.rb
CHANGED
@@ -133,6 +133,7 @@ module Kafka
|
|
133
133
|
def produce_message(event)
|
134
134
|
client = event.payload.fetch(:client_id)
|
135
135
|
topic = event.payload.fetch(:topic)
|
136
|
+
message_size = event.payload.fetch(:message_size)
|
136
137
|
buffer_size = event.payload.fetch(:buffer_size)
|
137
138
|
max_buffer_size = event.payload.fetch(:max_buffer_size)
|
138
139
|
buffer_fill_ratio = buffer_size.to_f / max_buffer_size.to_f
|
@@ -144,6 +145,8 @@ module Kafka
|
|
144
145
|
# This gets us the write rate.
|
145
146
|
increment("producer.produce.messages", tags: tags.merge(topic: topic))
|
146
147
|
|
148
|
+
histogram("producer.produce.message_size", message_size, tags: tags.merge(topic: topic))
|
149
|
+
|
147
150
|
# This gets us the avg/max buffer size per producer.
|
148
151
|
histogram("producer.buffer.size", buffer_size, tags: tags)
|
149
152
|
|
@@ -220,10 +223,19 @@ module Kafka
|
|
220
223
|
}
|
221
224
|
|
222
225
|
# This gets us the avg/max queue size per producer.
|
223
|
-
histogram("
|
226
|
+
histogram("async_producer.queue.size", queue_size, tags: tags)
|
224
227
|
|
225
228
|
# This gets us the avg/max queue fill ratio per producer.
|
226
|
-
histogram("
|
229
|
+
histogram("async_producer.queue.fill_ratio", queue_fill_ratio, tags: tags)
|
230
|
+
end
|
231
|
+
|
232
|
+
def buffer_overflow(event)
|
233
|
+
tags = {
|
234
|
+
client: event.payload.fetch(:client_id),
|
235
|
+
topic: event.payload.fetch(:topic),
|
236
|
+
}
|
237
|
+
|
238
|
+
increment("async_producer.produce.errors", tags: tags)
|
227
239
|
end
|
228
240
|
|
229
241
|
attach_to "async_producer.kafka"
|
data/lib/kafka/producer.rb
CHANGED
@@ -195,11 +195,13 @@ module Kafka
|
|
195
195
|
)
|
196
196
|
|
197
197
|
if buffer_size >= @max_buffer_size
|
198
|
-
buffer_overflow topic,
|
198
|
+
buffer_overflow topic,
|
199
|
+
"Cannot produce to #{topic}, max buffer size (#{@max_buffer_size} messages) reached"
|
199
200
|
end
|
200
201
|
|
201
202
|
if buffer_bytesize + message.bytesize >= @max_buffer_bytesize
|
202
|
-
buffer_overflow topic,
|
203
|
+
buffer_overflow topic,
|
204
|
+
"Cannot produce to #{topic}, max buffer bytesize (#{@max_buffer_bytesize} bytes) reached"
|
203
205
|
end
|
204
206
|
|
205
207
|
@target_topics.add(topic)
|
@@ -210,6 +212,7 @@ module Kafka
|
|
210
212
|
key: key,
|
211
213
|
topic: topic,
|
212
214
|
create_time: create_time,
|
215
|
+
message_size: message.bytesize,
|
213
216
|
buffer_size: buffer_size,
|
214
217
|
max_buffer_size: @max_buffer_size,
|
215
218
|
})
|
data/lib/kafka/version.rb
CHANGED