fluent-plugin-kafka 0.3.1 → 0.3.2
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/README.md +5 -0
- data/fluent-plugin-kafka.gemspec +1 -1
- data/lib/fluent/plugin/in_kafka_group.rb +52 -34
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 512f9e6a1ab34f3206a79904ff3134da1ee6de54
|
4
|
+
data.tar.gz: 27bcf99b9a4eac5ed2cf15694a249db4f3db6ffb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d926b09af1ed8611d85a40eb353aeda21b39f862c85a4131ada9e9fcfa9d057157fb107a56808af905c89c669c6a452b03eef508e665ae3957f7599c25c19af
|
7
|
+
data.tar.gz: 60d029566a17521e19dd93e0e6d2cefd35990a8b14d89202c42ba6cf6512608f78dced06e23d0e1386e95d206173ad78a77c65dba081f1c3e5adc150f74c07d4
|
data/README.md
CHANGED
@@ -138,6 +138,11 @@ Install snappy module before you use snappy compression.
|
|
138
138
|
|
139
139
|
$ gem install snappy
|
140
140
|
|
141
|
+
snappy gem uses native extension, so you need to install several packages before.
|
142
|
+
On Ubuntu, need development packages and snappy library.
|
143
|
+
|
144
|
+
$ sudo apt-get install build-essential autoconf automake libtool libsnappy-dev
|
145
|
+
|
141
146
|
#### Load balancing
|
142
147
|
|
143
148
|
Messages will be assigned a partition at random as default by ruby-kafka, but messages with the same partition key will always be assigned to the same partition by setting `default_partition_key` in config file.
|
data/fluent-plugin-kafka.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
13
|
gem.name = "fluent-plugin-kafka"
|
14
14
|
gem.require_paths = ["lib"]
|
15
|
-
gem.version = '0.3.
|
15
|
+
gem.version = '0.3.2'
|
16
16
|
gem.required_ruby_version = ">= 2.1.0"
|
17
17
|
|
18
18
|
gem.add_dependency "fluentd", [">= 0.10.58", "< 2"]
|
@@ -68,6 +68,15 @@ class Fluent::KafkaGroupInput < Fluent::Input
|
|
68
68
|
end
|
69
69
|
|
70
70
|
@parser_proc = setup_parser
|
71
|
+
|
72
|
+
@consumer_opts = {:group_id => @consumer_group}
|
73
|
+
@consumer_opts[:session_timeout] = @session_timeout if @session_timeout
|
74
|
+
@consumer_opts[:offset_commit_interval] = @offset_commit_interval if @offset_commit_interval
|
75
|
+
@consumer_opts[:offset_commit_threshold] = @offset_commit_threshold if @offset_commit_threshold
|
76
|
+
|
77
|
+
@fetch_opts = {}
|
78
|
+
@fetch_opts[:max_wait_time] = @max_wait_time if @max_wait_time
|
79
|
+
@fetch_opts[:min_bytes] = @min_bytes if @min_bytes
|
71
80
|
end
|
72
81
|
|
73
82
|
def setup_parser
|
@@ -89,55 +98,64 @@ class Fluent::KafkaGroupInput < Fluent::Input
|
|
89
98
|
def start
|
90
99
|
super
|
91
100
|
|
92
|
-
consumer_opts = {:group_id => @consumer_group}
|
93
|
-
consumer_opts[:session_timeout] = @session_timeout if @session_timeout
|
94
|
-
consumer_opts[:offset_commit_interval] = @offset_commit_interval if @offset_commit_interval
|
95
|
-
consumer_opts[:offset_commit_threshold] = @offset_commit_threshold if @offset_commit_threshold
|
96
|
-
|
97
|
-
@fetch_opts = {}
|
98
|
-
@fetch_opts[:max_wait_time] = @max_wait_time if @max_wait_time
|
99
|
-
@fetch_opts[:min_bytes] = @min_bytes if @min_bytes
|
100
|
-
|
101
101
|
@kafka = Kafka.new(seed_brokers: @brokers,
|
102
102
|
ssl_ca_cert: read_ssl_file(@ssl_ca_cert),
|
103
103
|
ssl_client_cert: read_ssl_file(@ssl_client_cert),
|
104
104
|
ssl_client_cert_key: read_ssl_file(@ssl_client_cert_key))
|
105
|
-
@consumer =
|
106
|
-
@topics.each { |topic|
|
107
|
-
@consumer.subscribe(topic, start_from_beginning: @start_from_beginning)
|
108
|
-
}
|
105
|
+
@consumer = setup_consumer
|
109
106
|
@thread = Thread.new(&method(:run))
|
110
107
|
end
|
111
108
|
|
112
109
|
def shutdown
|
113
|
-
|
110
|
+
# This nil assignment should be guarded by mutex in multithread programming manner.
|
111
|
+
# But the situation is very low contention, so we don't use mutex for now.
|
112
|
+
# If the problem happens, we will add a guard for consumer.
|
113
|
+
consumer = @consumer
|
114
|
+
@consumer = nil
|
115
|
+
consumer.stop
|
116
|
+
|
114
117
|
@thread.join
|
115
118
|
@kafka.close
|
116
119
|
super
|
117
120
|
end
|
118
121
|
|
122
|
+
def setup_consumer
|
123
|
+
consumer = @kafka.consumer(@consumer_opts)
|
124
|
+
@topics.each { |topic|
|
125
|
+
consumer.subscribe(topic, start_from_beginning: @start_from_beginning)
|
126
|
+
}
|
127
|
+
consumer
|
128
|
+
end
|
129
|
+
|
119
130
|
def run
|
120
|
-
@consumer
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
131
|
+
while @consumer
|
132
|
+
begin
|
133
|
+
@consumer.each_batch(@fetch_opts) { |batch|
|
134
|
+
es = Fluent::MultiEventStream.new
|
135
|
+
tag = batch.topic
|
136
|
+
tag = @add_prefix + "." + tag if @add_prefix
|
137
|
+
tag = tag + "." + @add_suffix if @add_suffix
|
138
|
+
|
139
|
+
batch.messages.each { |msg|
|
140
|
+
begin
|
141
|
+
es.add(Fluent::Engine.now, @parser_proc.call(msg))
|
142
|
+
rescue => e
|
143
|
+
log.warn "parser error in #{batch.topic}/#{batch.partition}", :error => e.to_s, :value => msg.value, :offset => msg.offset
|
144
|
+
log.debug_backtrace
|
145
|
+
end
|
146
|
+
}
|
147
|
+
|
148
|
+
unless es.empty?
|
149
|
+
router.emit_stream(tag, es)
|
150
|
+
end
|
151
|
+
}
|
152
|
+
rescue => e
|
153
|
+
log.error "unexpected error during consuming events from kafka. Re-fetch events.", :error => e.to_s
|
154
|
+
log.error_backtrace
|
137
155
|
end
|
138
|
-
|
156
|
+
end
|
139
157
|
rescue => e
|
140
|
-
|
141
|
-
|
158
|
+
log.error "unexpected error during consumer object access", :error => e.to_s
|
159
|
+
log.error_backtrace
|
142
160
|
end
|
143
161
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-kafka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hidemasa Togashi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-10-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fluentd
|