ruby-kafka 0.7.0.alpha4 → 0.7.0.beta1
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/CHANGELOG.md +14 -0
- data/lib/kafka/async_producer.rb +4 -2
- data/lib/kafka/client.rb +10 -7
- data/lib/kafka/consumer.rb +2 -0
- data/lib/kafka/fetched_message.rb +5 -0
- data/lib/kafka/message_buffer.rb +2 -2
- data/lib/kafka/pending_message.rb +4 -2
- data/lib/kafka/producer.rb +17 -13
- data/lib/kafka/protocol/record.rb +2 -2
- data/lib/kafka/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1662d1f7534da36a4a6f5ade9e194fd5142034ba4b53d1b6291fcf233e7eb684
|
4
|
+
data.tar.gz: 36b9ecb999f55cfd797c23da795c214c7b9712b42a88e6343024e0e17a123eac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b22b391b89199f8001401069f5040bac248866f82b8bd1f69ecf3d67d947ef7f54f6d933a68a9114c2a28f54097be4cedb3c74743bae1b231f313a4427ad257
|
7
|
+
data.tar.gz: '0318b5a5cd085ea2c96e7e1bf3c91d914c3898d555b6bdf5681851907e0dec4e2f3ab39c95bf8c289558c41d0c901b243ea7e240e2271235769a2378069e1bbc'
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,20 @@ Changes and additions to the library will be listed here.
|
|
5
5
|
## Unreleased
|
6
6
|
|
7
7
|
- Drop support for Kafka 0.10 in favor of native support for Kafka 0.11.
|
8
|
+
- Support record headers (#604).
|
9
|
+
- Add instrumenter and logger when async message delivery fails (#603).
|
10
|
+
|
11
|
+
## 0.6.7
|
12
|
+
|
13
|
+
- Handle case where consumer doesn't know about the topic (#597 + 0e302cbd0f31315bf81c1d1645520413ad6b58f0)
|
14
|
+
|
15
|
+
## v0.6.5
|
16
|
+
|
17
|
+
- Fix bug related to partition assignment.
|
18
|
+
|
19
|
+
## v0.6.4
|
20
|
+
|
21
|
+
- Fix bug that caused consumers to jump back and reprocess messages (#595).
|
8
22
|
|
9
23
|
## v0.6.3
|
10
24
|
|
data/lib/kafka/async_producer.rb
CHANGED
@@ -241,8 +241,10 @@ module Kafka
|
|
241
241
|
|
242
242
|
def deliver_messages
|
243
243
|
@producer.deliver_messages
|
244
|
-
rescue DeliveryFailed, ConnectionError
|
245
|
-
# Failed to deliver messages -- nothing to do but try again later.
|
244
|
+
rescue DeliveryFailed, ConnectionError => e
|
245
|
+
# Failed to deliver messages -- nothing to do but log and try again later.
|
246
|
+
@logger.error("Failed to asynchronously deliver messages: #{e.message}")
|
247
|
+
@instrumenter.instrument("error.async_producer", { error: e })
|
246
248
|
end
|
247
249
|
|
248
250
|
def threshold_reached?
|
data/lib/kafka/client.rb
CHANGED
@@ -109,6 +109,7 @@ module Kafka
|
|
109
109
|
#
|
110
110
|
# @param value [String, nil] the message value.
|
111
111
|
# @param key [String, nil] the message key.
|
112
|
+
# @param headers [Hash<String, String>] the headers for the message.
|
112
113
|
# @param topic [String] the topic that the message should be written to.
|
113
114
|
# @param partition [Integer, nil] the partition that the message should be written
|
114
115
|
# to, or `nil` if either `partition_key` is passed or the partition should be
|
@@ -118,16 +119,17 @@ module Kafka
|
|
118
119
|
# @param retries [Integer] the number of times to retry the delivery before giving
|
119
120
|
# up.
|
120
121
|
# @return [nil]
|
121
|
-
def deliver_message(value, key: nil, topic:, partition: nil, partition_key: nil, retries: 1)
|
122
|
+
def deliver_message(value, key: nil, headers: {}, topic:, partition: nil, partition_key: nil, retries: 1)
|
122
123
|
create_time = Time.now
|
123
124
|
|
124
125
|
message = PendingMessage.new(
|
125
|
-
value,
|
126
|
-
key,
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
126
|
+
value: value,
|
127
|
+
key: key,
|
128
|
+
headers: headers,
|
129
|
+
topic: topic,
|
130
|
+
partition: partition,
|
131
|
+
partition_key: partition_key,
|
132
|
+
create_time: create_time
|
131
133
|
)
|
132
134
|
|
133
135
|
if partition.nil?
|
@@ -140,6 +142,7 @@ module Kafka
|
|
140
142
|
buffer.write(
|
141
143
|
value: message.value,
|
142
144
|
key: message.key,
|
145
|
+
headers: message.headers,
|
143
146
|
topic: message.topic,
|
144
147
|
partition: partition,
|
145
148
|
create_time: message.create_time,
|
data/lib/kafka/consumer.rb
CHANGED
@@ -37,6 +37,7 @@ module Kafka
|
|
37
37
|
# puts message.topic
|
38
38
|
# puts message.partition
|
39
39
|
# puts message.key
|
40
|
+
# puts message.headers
|
40
41
|
# puts message.value
|
41
42
|
# puts message.offset
|
42
43
|
# end
|
@@ -213,6 +214,7 @@ module Kafka
|
|
213
214
|
create_time: message.create_time,
|
214
215
|
key: message.key,
|
215
216
|
value: message.value,
|
217
|
+
headers: message.headers
|
216
218
|
}
|
217
219
|
|
218
220
|
# Instrument an event immediately so that subscribers don't have to wait until
|
@@ -34,6 +34,11 @@ module Kafka
|
|
34
34
|
@message.create_time
|
35
35
|
end
|
36
36
|
|
37
|
+
# @return [Hash<String, String>] the headers of the message.
|
38
|
+
def headers
|
39
|
+
@message.headers
|
40
|
+
end
|
41
|
+
|
37
42
|
# @return [Boolean] whether this record is a control record
|
38
43
|
def is_control_record
|
39
44
|
@message.is_control_record
|
data/lib/kafka/message_buffer.rb
CHANGED
@@ -16,8 +16,8 @@ module Kafka
|
|
16
16
|
@bytesize = 0
|
17
17
|
end
|
18
18
|
|
19
|
-
def write(value:, key:, topic:, partition:, create_time: Time.now)
|
20
|
-
message = Protocol::Record.new(key: key, value: value, create_time: create_time)
|
19
|
+
def write(value:, key:, topic:, partition:, create_time: Time.now, headers: {})
|
20
|
+
message = Protocol::Record.new(key: key, value: value, create_time: create_time, headers: headers)
|
21
21
|
|
22
22
|
buffer_for(topic, partition) << message
|
23
23
|
|
@@ -2,11 +2,12 @@
|
|
2
2
|
|
3
3
|
module Kafka
|
4
4
|
class PendingMessage
|
5
|
-
attr_reader :value, :key, :topic, :partition, :partition_key, :create_time, :bytesize
|
5
|
+
attr_reader :value, :key, :headers, :topic, :partition, :partition_key, :create_time, :bytesize
|
6
6
|
|
7
|
-
def initialize(value
|
7
|
+
def initialize(value:, key:, headers: {}, topic:, partition:, partition_key:, create_time:)
|
8
8
|
@value = value
|
9
9
|
@key = key
|
10
|
+
@headers = headers
|
10
11
|
@topic = topic
|
11
12
|
@partition = partition
|
12
13
|
@partition_key = partition_key
|
@@ -18,6 +19,7 @@ module Kafka
|
|
18
19
|
@value == other.value &&
|
19
20
|
@key == other.key &&
|
20
21
|
@topic == other.topic &&
|
22
|
+
@headers == other.headers &&
|
21
23
|
@partition == other.partition &&
|
22
24
|
@partition_key == other.partition_key &&
|
23
25
|
@create_time == other.create_time &&
|
data/lib/kafka/producer.rb
CHANGED
@@ -172,6 +172,7 @@ module Kafka
|
|
172
172
|
#
|
173
173
|
# @param value [String] the message data.
|
174
174
|
# @param key [String] the message key.
|
175
|
+
# @param headers [Hash<String, String>] the headers for the message.
|
175
176
|
# @param topic [String] the topic that the message should be written to.
|
176
177
|
# @param partition [Integer] the partition that the message should be written to.
|
177
178
|
# @param partition_key [String] the key that should be used to assign a partition.
|
@@ -179,14 +180,15 @@ module Kafka
|
|
179
180
|
#
|
180
181
|
# @raise [BufferOverflow] if the maximum buffer size has been reached.
|
181
182
|
# @return [nil]
|
182
|
-
def produce(value, key: nil, topic:, partition: nil, partition_key: nil, create_time: Time.now)
|
183
|
+
def produce(value, key: nil, headers: {}, topic:, partition: nil, partition_key: nil, create_time: Time.now)
|
183
184
|
message = PendingMessage.new(
|
184
|
-
value && value.to_s,
|
185
|
-
key && key.to_s,
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
185
|
+
value: value && value.to_s,
|
186
|
+
key: key && key.to_s,
|
187
|
+
headers: headers,
|
188
|
+
topic: topic.to_s,
|
189
|
+
partition: partition && Integer(partition),
|
190
|
+
partition_key: partition_key && partition_key.to_s,
|
191
|
+
create_time: create_time
|
190
192
|
)
|
191
193
|
|
192
194
|
if buffer_size >= @max_buffer_size
|
@@ -354,6 +356,7 @@ module Kafka
|
|
354
356
|
@buffer.write(
|
355
357
|
value: message.value,
|
356
358
|
key: message.key,
|
359
|
+
headers: message.headers,
|
357
360
|
topic: message.topic,
|
358
361
|
partition: partition,
|
359
362
|
create_time: message.create_time,
|
@@ -390,12 +393,13 @@ module Kafka
|
|
390
393
|
@buffer.each do |topic, partition, messages_for_partition|
|
391
394
|
messages_for_partition.each do |message|
|
392
395
|
messages << PendingMessage.new(
|
393
|
-
message.value,
|
394
|
-
message.key,
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
396
|
+
value: message.value,
|
397
|
+
key: message.key,
|
398
|
+
headers: message.headers,
|
399
|
+
topic: topic,
|
400
|
+
partition: partition,
|
401
|
+
partition_key: nil,
|
402
|
+
create_time: message.create_time
|
399
403
|
)
|
400
404
|
end
|
401
405
|
end
|
@@ -40,8 +40,8 @@ module Kafka
|
|
40
40
|
record_encoder.write_varint_bytes(@value)
|
41
41
|
|
42
42
|
record_encoder.write_varint_array(@headers.to_a) do |header_key, header_value|
|
43
|
-
record_encoder.write_varint_string(header_key)
|
44
|
-
record_encoder.write_varint_bytes(header_value)
|
43
|
+
record_encoder.write_varint_string(header_key.to_s)
|
44
|
+
record_encoder.write_varint_bytes(header_value.to_s)
|
45
45
|
end
|
46
46
|
|
47
47
|
encoder.write_varint_bytes(record_buffer.string)
|
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.7.0.
|
4
|
+
version: 0.7.0.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: 2018-06-
|
11
|
+
date: 2018-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: digest-crc
|