logstash-integration-kafka 10.6.0-java → 10.7.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/logstash/inputs/kafka.rb +1 -1
- data/lib/logstash/plugin_mixins/common.rb +11 -10
- data/logstash-integration-kafka.gemspec +2 -1
- data/spec/integration/inputs/kafka_spec.rb +18 -18
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 166b8a4d60aaa51f4c22e6ba98f5ecf9c5991ce853c3dfa8ae15c85ad28ad4bd
|
4
|
+
data.tar.gz: 1fb417190daa76b08596d8c35df7004b0f1ea284eff347ab7bd5eaeabd004e0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25150a143b4ccd2375572697df7bafadc87b35930f11e9916a7db1a25a69830ab1e3ae4a2d32119bc127c81af557af277188ef705fed24d1c8f1929e5bc1e73d
|
7
|
+
data.tar.gz: 845de0baed1db54a6ec2901b92665deca90a21f40b00400a5ae5490d6355f3771048547b158dbe19b8c7ac66587398640052c6295546793ee95251df276e35af
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 10.7.0
|
2
|
+
- Switched use from Faraday to Manticore as HTTP client library to access Schema Registry service
|
3
|
+
to fix issue [#63](https://github.com/logstash-plugins/logstash-integration-kafka/issue/63)
|
4
|
+
|
1
5
|
## 10.6.0
|
2
6
|
- Added functionality to Kafka input to use Avro deserializer in retrieving data from Kafka. The schema is retrieved
|
3
7
|
from an instance of Confluent's Schema Registry service [#51](https://github.com/logstash-plugins/logstash-integration-kafka/pull/51)
|
@@ -4,7 +4,7 @@ require 'stud/interval'
|
|
4
4
|
require 'java'
|
5
5
|
require 'logstash-integration-kafka_jars.rb'
|
6
6
|
require 'logstash/plugin_mixins/kafka_support'
|
7
|
-
require
|
7
|
+
require 'manticore'
|
8
8
|
require "json"
|
9
9
|
require "logstash/json"
|
10
10
|
require_relative '../plugin_mixins/common'
|
@@ -45,20 +45,21 @@ module LogStash
|
|
45
45
|
|
46
46
|
private
|
47
47
|
def check_for_schema_registry_connectivity_and_subjects
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
if schema_registry_key and !schema_registry_key.empty?
|
53
|
-
conn.basic_auth(schema_registry_key, schema_registry_secret.value)
|
54
|
-
end
|
48
|
+
options = {}
|
49
|
+
if schema_registry_proxy && !schema_registry_proxy.empty?
|
50
|
+
options[:proxy] = schema_registry_proxy.to_s
|
55
51
|
end
|
52
|
+
if schema_registry_key and !schema_registry_key.empty?
|
53
|
+
options[:auth] = {:user => schema_registry_key, :password => schema_registry_secret.value}
|
54
|
+
end
|
55
|
+
client = Manticore::Client.new(options)
|
56
|
+
|
56
57
|
begin
|
57
|
-
response = client.get('/subjects')
|
58
|
-
rescue
|
58
|
+
response = client.get(@schema_registry_url.to_s + '/subjects').body
|
59
|
+
rescue Manticore::ManticoreException => e
|
59
60
|
raise LogStash::ConfigurationError.new("Schema registry service doesn't respond, error: #{e.message}")
|
60
61
|
end
|
61
|
-
registered_subjects = JSON.parse response
|
62
|
+
registered_subjects = JSON.parse response
|
62
63
|
expected_subjects = @topics.map { |t| "#{t}-value"}
|
63
64
|
if (expected_subjects & registered_subjects).size != expected_subjects.size
|
64
65
|
undefined_topic_subjects = expected_subjects - registered_subjects
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-integration-kafka'
|
3
|
-
s.version = '10.
|
3
|
+
s.version = '10.7.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 "+
|
@@ -46,6 +46,7 @@ Gem::Specification.new do |s|
|
|
46
46
|
s.add_runtime_dependency 'logstash-codec-json'
|
47
47
|
s.add_runtime_dependency 'logstash-codec-plain'
|
48
48
|
s.add_runtime_dependency 'stud', '>= 0.0.22', '< 0.1.0'
|
49
|
+
s.add_runtime_dependency "manticore", '>= 0.5.4', '< 1.0.0'
|
49
50
|
|
50
51
|
s.add_development_dependency 'logstash-devutils'
|
51
52
|
s.add_development_dependency 'rspec-wait'
|
@@ -3,7 +3,7 @@ require "logstash/devutils/rspec/spec_helper"
|
|
3
3
|
require "logstash/inputs/kafka"
|
4
4
|
require "rspec/wait"
|
5
5
|
require "stud/try"
|
6
|
-
require "
|
6
|
+
require "manticore"
|
7
7
|
require "json"
|
8
8
|
|
9
9
|
# Please run kafka_test_setup.sh prior to executing this integration test.
|
@@ -164,11 +164,11 @@ describe "schema registry connection options" do
|
|
164
164
|
|
165
165
|
before(:each) do
|
166
166
|
response = save_avro_schema_to_schema_registry(File.join(Dir.pwd, "spec", "unit", "inputs", "avro_schema_fixture_payment.asvc"), SUBJECT_NAME)
|
167
|
-
expect( response.
|
167
|
+
expect( response.code ).to be(200)
|
168
168
|
end
|
169
169
|
|
170
170
|
after(:each) do
|
171
|
-
schema_registry_client =
|
171
|
+
schema_registry_client = Manticore::Client.new
|
172
172
|
delete_remote_schema(schema_registry_client, SUBJECT_NAME)
|
173
173
|
end
|
174
174
|
|
@@ -187,26 +187,26 @@ end
|
|
187
187
|
def save_avro_schema_to_schema_registry(schema_file, subject_name)
|
188
188
|
raw_schema = File.readlines(schema_file).map(&:chomp).join
|
189
189
|
raw_schema_quoted = raw_schema.gsub('"', '\"')
|
190
|
-
response =
|
191
|
-
'{"schema": "' + raw_schema_quoted + '"}',
|
192
|
-
"Content-Type" => "application/vnd.schemaregistry.v1+json")
|
190
|
+
response = Manticore.post("http://localhost:8081/subjects/#{subject_name}/versions",
|
191
|
+
body: '{"schema": "' + raw_schema_quoted + '"}',
|
192
|
+
headers: {"Content-Type" => "application/vnd.schemaregistry.v1+json"})
|
193
193
|
response
|
194
194
|
end
|
195
195
|
|
196
196
|
def delete_remote_schema(schema_registry_client, subject_name)
|
197
|
-
expect(schema_registry_client.delete("/subjects/#{subject_name}").
|
198
|
-
expect(schema_registry_client.delete("/subjects/#{subject_name}?permanent=true").
|
197
|
+
expect(schema_registry_client.delete("http://localhost:8081/subjects/#{subject_name}").code ).to be(200)
|
198
|
+
expect(schema_registry_client.delete("http://localhost:8081/subjects/#{subject_name}?permanent=true").code ).to be(200)
|
199
199
|
end
|
200
200
|
|
201
201
|
# AdminClientConfig = org.alpache.kafka.clients.admin.AdminClientConfig
|
202
202
|
|
203
203
|
describe "Schema registry API", :integration => true do
|
204
204
|
|
205
|
-
let(:schema_registry) {
|
205
|
+
let(:schema_registry) { Manticore::Client.new }
|
206
206
|
|
207
207
|
context 'listing subject on clean instance' do
|
208
208
|
it "should return an empty set" do
|
209
|
-
subjects = JSON.parse schema_registry.get('/subjects').body
|
209
|
+
subjects = JSON.parse schema_registry.get('http://localhost:8081/subjects').body
|
210
210
|
expect( subjects ).to be_empty
|
211
211
|
end
|
212
212
|
end
|
@@ -214,30 +214,30 @@ describe "Schema registry API", :integration => true do
|
|
214
214
|
context 'send a schema definition' do
|
215
215
|
it "save the definition" do
|
216
216
|
response = save_avro_schema_to_schema_registry(File.join(Dir.pwd, "spec", "unit", "inputs", "avro_schema_fixture_payment.asvc"), "schema_test_1")
|
217
|
-
expect( response.
|
217
|
+
expect( response.code ).to be(200)
|
218
218
|
delete_remote_schema(schema_registry, "schema_test_1")
|
219
219
|
end
|
220
220
|
|
221
221
|
it "delete the schema just added" do
|
222
222
|
response = save_avro_schema_to_schema_registry(File.join(Dir.pwd, "spec", "unit", "inputs", "avro_schema_fixture_payment.asvc"), "schema_test_1")
|
223
|
-
expect( response.
|
223
|
+
expect( response.code ).to be(200)
|
224
224
|
|
225
|
-
expect( schema_registry.delete('/subjects/schema_test_1?permanent=false').
|
225
|
+
expect( schema_registry.delete('http://localhost:8081/subjects/schema_test_1?permanent=false').code ).to be(200)
|
226
226
|
sleep(1)
|
227
|
-
subjects = JSON.parse schema_registry.get('/subjects').body
|
227
|
+
subjects = JSON.parse schema_registry.get('http://localhost:8081/subjects').body
|
228
228
|
expect( subjects ).to be_empty
|
229
229
|
end
|
230
230
|
end
|
231
231
|
|
232
232
|
context 'use the schema to serialize' do
|
233
233
|
after(:each) do
|
234
|
-
expect( schema_registry.delete('/subjects/topic_avro-value').
|
234
|
+
expect( schema_registry.delete('http://localhost:8081/subjects/topic_avro-value').code ).to be(200)
|
235
235
|
sleep 1
|
236
|
-
expect( schema_registry.delete('/subjects/topic_avro-value?permanent=true').
|
236
|
+
expect( schema_registry.delete('http://localhost:8081/subjects/topic_avro-value?permanent=true').code ).to be(200)
|
237
237
|
|
238
238
|
Stud.try(3.times, [StandardError, RSpec::Expectations::ExpectationNotMetError]) do
|
239
239
|
wait(10).for do
|
240
|
-
subjects = JSON.parse schema_registry.get('/subjects').body
|
240
|
+
subjects = JSON.parse schema_registry.get('http://localhost:8081/subjects').body
|
241
241
|
subjects.empty?
|
242
242
|
end.to be_truthy
|
243
243
|
end
|
@@ -299,7 +299,7 @@ describe "Schema registry API", :integration => true do
|
|
299
299
|
delete_topic_if_exists avro_topic_name
|
300
300
|
write_some_data_to avro_topic_name
|
301
301
|
|
302
|
-
subjects = JSON.parse schema_registry.get('/subjects').body
|
302
|
+
subjects = JSON.parse schema_registry.get('http://localhost:8081/subjects').body
|
303
303
|
expect( subjects ).to contain_exactly("topic_avro-value")
|
304
304
|
|
305
305
|
num_events = 1
|
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.
|
4
|
+
version: 10.7.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Elastic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -106,6 +106,26 @@ dependencies:
|
|
106
106
|
- - "<"
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: 0.1.0
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
requirement: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 0.5.4
|
115
|
+
- - "<"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.0.0
|
118
|
+
name: manticore
|
119
|
+
prerelease: false
|
120
|
+
type: :runtime
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.5.4
|
126
|
+
- - "<"
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 1.0.0
|
109
129
|
- !ruby/object:Gem::Dependency
|
110
130
|
requirement: !ruby/object:Gem::Requirement
|
111
131
|
requirements:
|