logstash-integration-kafka 10.8.2-java → 10.9.0-java

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e11499f791fd2bd71102ddb6f8e52fcbd9791feecf4107c7ebd27dc9334cc34
4
- data.tar.gz: 779cd381a6e53155f61457229df4fc827ceda02ef4e069d4eab0240dafa4ab83
3
+ metadata.gz: df9c89cdfcc2db6702409ec45ffb8d9f8f2b9274304889df1527e0697ccfcf95
4
+ data.tar.gz: e907ad2e277d27c8cdbe98ebd203af86a3505a85574d64ace4402607c075a69e
5
5
  SHA512:
6
- metadata.gz: 5577048fe1adee0c28b012c0bf6eb0ff594b7be4760f7b7ebdf9072473fb0a1806e24997dd7b0659c21f205396a4d7eccb10bc4e789541c35fb7e32610562632
7
- data.tar.gz: 7ee0e7428d63957a57e927a3f0408bcdddf94efad944c5cf0acbac3c1031be55b6751ad0290ea134e5201f10f9e26f2804c6d68150e925f651c9db27847bab5e
6
+ metadata.gz: bac93eb957af9028a6efc6e31a66c94818ae61333fa738daa6606abdd325dbea206fea2cd905d891f2b341a7bc983f8eaf5a5471015ac9548bc902f941b4a0d9
7
+ data.tar.gz: 456739a2409ef5a42f007a23c8d0dbfceb3518e8e65b528c0f48266f2a219c2415a83a507fdab3ba028cbc5493d645c080ce191a0d39d7c1787557abded9a0e1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 10.9.0
2
+ - Refactor: leverage codec when using schema registry [#106](https://github.com/logstash-plugins/logstash-integration-kafka/pull/106)
3
+
4
+ Previously using `schema_registry_url` parsed the payload as JSON even if `codec => 'plain'` was set, this is no longer the case.
5
+
1
6
  ## 10.8.2
2
7
  - [DOC] Updates description of `enable_auto_commit=false` to clarify that the commit happens after data is fetched AND written to the queue [#90](https://github.com/logstash-plugins/logstash-integration-kafka/pull/90)
3
8
  - Fix: update to Gradle 7 [#104](https://github.com/logstash-plugins/logstash-integration-kafka/pull/104)
@@ -63,7 +63,12 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
63
63
 
64
64
  config_name 'kafka'
65
65
 
66
- default :codec, 'plain'
66
+ # default :codec, 'plain' or 'json' depending whether schema registry is used
67
+ #
68
+ # @override LogStash::Inputs::Base - removing the `:default => :plain`
69
+ config :codec, :validate => :codec
70
+ # NOTE: isn't necessary due the params['codec'] = ... done in #initialize
71
+ # having the `nil` default explicit makes the behavior more noticeable.
67
72
 
68
73
  # The frequency in milliseconds that the consumer offsets are committed to Kafka.
69
74
  config :auto_commit_interval_ms, :validate => :number, :default => 5000 # Kafka default
@@ -249,6 +254,15 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
249
254
 
250
255
  attr_reader :metadata_mode
251
256
 
257
+ # @overload based on schema registry change the codec default
258
+ def initialize(params = {})
259
+ unless params.key?('codec')
260
+ params['codec'] = params.key?('schema_registry_url') ? 'json' : 'plain'
261
+ end
262
+
263
+ super(params)
264
+ end
265
+
252
266
  public
253
267
  def register
254
268
  @runner_threads = []
@@ -341,22 +355,11 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
341
355
  def handle_record(record, codec_instance, queue)
342
356
  codec_instance.decode(record.value.to_s) do |event|
343
357
  decorate(event)
344
- maybe_apply_schema(event, record)
345
358
  maybe_set_metadata(event, record)
346
359
  queue << event
347
360
  end
348
361
  end
349
362
 
350
- def maybe_apply_schema(event, record)
351
- if schema_registry_url
352
- json = LogStash::Json.load(record.value.to_s)
353
- json.each do |k, v|
354
- event.set(k, v)
355
- end
356
- event.remove("message")
357
- end
358
- end
359
-
360
363
  def maybe_set_metadata(event, record)
361
364
  if @metadata_mode.include?(:record_props)
362
365
  event.set("[@metadata][kafka][topic]", record.topic)
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-integration-kafka'
3
- s.version = '10.8.2'
3
+ s.version = '10.9.0'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = "Integration with Kafka - input and output plugins"
6
6
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline "+
@@ -50,6 +50,7 @@ Gem::Specification.new do |s|
50
50
  s.add_runtime_dependency 'logstash-mixin-deprecation_logger_support', '~>1.0'
51
51
 
52
52
  s.add_development_dependency 'logstash-devutils'
53
+ s.add_development_dependency 'logstash-codec-line'
53
54
  s.add_development_dependency 'rspec-wait'
54
55
  s.add_development_dependency 'digest-crc', '~> 0.5.1' # 0.6.0 started using a C-ext
55
56
  s.add_development_dependency 'ruby-kafka' # depends on digest-crc
@@ -16,38 +16,38 @@ describe "inputs/kafka", :integration => true do
16
16
  let(:group_id_5) {rand(36**8).to_s(36)}
17
17
  let(:group_id_6) {rand(36**8).to_s(36)}
18
18
  let(:plain_config) do
19
- { 'topics' => ['logstash_integration_topic_plain'], 'codec' => 'plain', 'group_id' => group_id_1,
19
+ { 'topics' => ['logstash_integration_topic_plain'], 'group_id' => group_id_1,
20
20
  'auto_offset_reset' => 'earliest' }
21
21
  end
22
22
  let(:multi_consumer_config) do
23
23
  plain_config.merge({"group_id" => group_id_4, "client_id" => "spec", "consumer_threads" => 3})
24
24
  end
25
25
  let(:snappy_config) do
26
- { 'topics' => ['logstash_integration_topic_snappy'], 'codec' => 'plain', 'group_id' => group_id_1,
26
+ { 'topics' => ['logstash_integration_topic_snappy'], 'group_id' => group_id_1,
27
27
  'auto_offset_reset' => 'earliest' }
28
28
  end
29
29
  let(:lz4_config) do
30
- { 'topics' => ['logstash_integration_topic_lz4'], 'codec' => 'plain', 'group_id' => group_id_1,
30
+ { 'topics' => ['logstash_integration_topic_lz4'], 'group_id' => group_id_1,
31
31
  'auto_offset_reset' => 'earliest' }
32
32
  end
33
33
  let(:pattern_config) do
34
- { 'topics_pattern' => 'logstash_integration_topic_.*', 'group_id' => group_id_2, 'codec' => 'plain',
34
+ { 'topics_pattern' => 'logstash_integration_topic_.*', 'group_id' => group_id_2,
35
35
  'auto_offset_reset' => 'earliest' }
36
36
  end
37
37
  let(:decorate_config) do
38
- { 'topics' => ['logstash_integration_topic_plain'], 'codec' => 'plain', 'group_id' => group_id_3,
38
+ { 'topics' => ['logstash_integration_topic_plain'], 'group_id' => group_id_3,
39
39
  'auto_offset_reset' => 'earliest', 'decorate_events' => 'true' }
40
40
  end
41
41
  let(:decorate_headers_config) do
42
- { 'topics' => ['logstash_integration_topic_plain_with_headers'], 'codec' => 'plain', 'group_id' => group_id_3,
42
+ { 'topics' => ['logstash_integration_topic_plain_with_headers'], 'group_id' => group_id_3,
43
43
  'auto_offset_reset' => 'earliest', 'decorate_events' => 'extended' }
44
44
  end
45
45
  let(:decorate_bad_headers_config) do
46
- { 'topics' => ['logstash_integration_topic_plain_with_headers_badly'], 'codec' => 'plain', 'group_id' => group_id_3,
46
+ { 'topics' => ['logstash_integration_topic_plain_with_headers_badly'], 'group_id' => group_id_3,
47
47
  'auto_offset_reset' => 'earliest', 'decorate_events' => 'extended' }
48
48
  end
49
49
  let(:manual_commit_config) do
50
- { 'topics' => ['logstash_integration_topic_plain'], 'codec' => 'plain', 'group_id' => group_id_5,
50
+ { 'topics' => ['logstash_integration_topic_plain'], 'group_id' => group_id_5,
51
51
  'auto_offset_reset' => 'earliest', 'enable_auto_commit' => 'false' }
52
52
  end
53
53
  let(:timeout_seconds) { 30 }
@@ -352,10 +352,7 @@ describe "Deserializing with the schema registry", :integration => true do
352
352
 
353
353
  let(:base_config) do
354
354
  {
355
- 'topics' => [avro_topic_name],
356
- 'codec' => 'plain',
357
- 'group_id' => group_id_1,
358
- 'auto_offset_reset' => 'earliest'
355
+ 'topics' => [avro_topic_name], 'group_id' => group_id_1, 'auto_offset_reset' => 'earliest'
359
356
  }
360
357
  end
361
358
 
@@ -177,7 +177,23 @@ describe LogStash::Inputs::Kafka do
177
177
  end
178
178
  end
179
179
 
180
- describe "schema registry parameter verification" do
180
+ it 'uses plain codec by default' do
181
+ expect( subject.codec ).to respond_to :decode
182
+ expect( subject.codec.class ).to be LogStash::Codecs::Plain
183
+ end
184
+
185
+ context 'with codec option' do
186
+
187
+ let(:config) { super().merge 'codec' => 'line' }
188
+
189
+ it 'uses specified codec' do
190
+ expect( subject.codec ).to respond_to :decode
191
+ expect( subject.codec.class ).to be LogStash::Codecs::Line
192
+ end
193
+
194
+ end
195
+
196
+ describe "schema registry" do
181
197
  let(:base_config) do {
182
198
  'schema_registry_url' => 'http://localhost:8081',
183
199
  'topics' => ['logstash'],
@@ -186,7 +202,7 @@ describe LogStash::Inputs::Kafka do
186
202
  end
187
203
 
188
204
  context "schema_registry_url" do
189
- let(:config) { base_config }
205
+ let(:config) { base_config }
190
206
 
191
207
  it "conflict with value_deserializer_class should fail" do
192
208
  config['value_deserializer_class'] = 'my.fantasy.Deserializer'
@@ -197,6 +213,11 @@ describe LogStash::Inputs::Kafka do
197
213
  config['topics_pattern'] = 'topic_.*'
198
214
  expect { subject.register }.to raise_error LogStash::ConfigurationError, /Option schema_registry_url prohibit the customization of topics_pattern/
199
215
  end
216
+
217
+ it 'switches default codec to json' do
218
+ expect( subject.codec ).to respond_to :decode
219
+ expect( subject.codec.class ).to be LogStash::Codecs::JSON
220
+ end
200
221
  end
201
222
 
202
223
  context 'when kerberos auth is used' do
@@ -204,9 +225,8 @@ describe LogStash::Inputs::Kafka do
204
225
  context "with #{protocol}" do
205
226
  ['auto', 'skip'].each do |vsr|
206
227
  context "when validata_schema_registry is #{vsr}" do
207
- let(:config) { base_config.merge({'security_protocol' => protocol,
208
- 'schema_registry_validation' => vsr})
209
- }
228
+ let(:config) { base_config.merge({'security_protocol' => protocol, 'schema_registry_validation' => vsr}) }
229
+
210
230
  it 'skips verification' do
211
231
  expect(subject).not_to receive(:check_for_schema_registry_connectivity_and_subjects)
212
232
  expect { subject.register }.not_to raise_error
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-integration-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 10.8.2
4
+ version: 10.9.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-04 00:00:00.000000000 Z
11
+ date: 2021-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -154,6 +154,20 @@ dependencies:
154
154
  - - ">="
155
155
  - !ruby/object:Gem::Version
156
156
  version: '0'
157
+ - !ruby/object:Gem::Dependency
158
+ requirement: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ name: logstash-codec-line
164
+ prerelease: false
165
+ type: :development
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
157
171
  - !ruby/object:Gem::Dependency
158
172
  requirement: !ruby/object:Gem::Requirement
159
173
  requirements: