logstash-input-kafka 6.2.7 → 6.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/docs/index.asciidoc +551 -0
- data/lib/log4j/log4j/1.2.17/log4j-1.2.17.jar +0 -0
- data/lib/logstash/inputs/kafka.rb +5 -1
- data/lib/net/jpountz/lz4/lz4/1.3.0/lz4-1.3.0.jar +0 -0
- data/lib/org/apache/kafka/kafka-clients/0.10.2.1/kafka-clients-0.10.2.1.jar +0 -0
- data/lib/org/apache/logging/log4j/log4j-1.2-api/2.6.2/log4j-1.2-api-2.6.2.jar +0 -0
- data/lib/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar +0 -0
- data/lib/org/apache/logging/log4j/log4j-core/2.6.2/log4j-core-2.6.2.jar +0 -0
- data/lib/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar +0 -0
- data/lib/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar +0 -0
- data/lib/org/xerial/snappy/snappy-java/1.1.2.6/snappy-java-1.1.2.6.jar +0 -0
- data/logstash-input-kafka.gemspec +3 -3
- data/spec/integration/inputs/kafka_spec.rb +20 -0
- data/vendor/jar-dependencies/runtime-jars/kafka-clients-0.10.2.1.jar +0 -0
- metadata +43 -33
- data/vendor/jar-dependencies/runtime-jars/kafka-clients-0.10.1.1.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67d7e39487de32bc46086f71dc728d0b73a8d51d
|
4
|
+
data.tar.gz: 3e95c206a4142c3c90aa814e33d534edf5a6ce94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aba387cb731bc155f245f6fd913b4cdd41b0cd9ef39468f392412fb4424b9474bf01f4156465115eb94860d1a22cf8c60a2dcae81be699b30a0d91ce5ba4bb70
|
7
|
+
data.tar.gz: aaebae3fb793842fca36c652c3de82812bbb6811a82d7d3ad6e29ebb3c9de38ebf14fd40e6eb5c14f37ac89b39d244de4991bcb6c605de055810da71094212d7
|
data/CHANGELOG.md
CHANGED
data/docs/index.asciidoc
ADDED
@@ -0,0 +1,551 @@
|
|
1
|
+
:plugin: kafka
|
2
|
+
:type: input
|
3
|
+
|
4
|
+
///////////////////////////////////////////
|
5
|
+
START - GENERATED VARIABLES, DO NOT EDIT!
|
6
|
+
///////////////////////////////////////////
|
7
|
+
:version: %VERSION%
|
8
|
+
:release_date: %RELEASE_DATE%
|
9
|
+
:changelog_url: %CHANGELOG_URL%
|
10
|
+
:include_path: ../../../logstash/docs/include
|
11
|
+
///////////////////////////////////////////
|
12
|
+
END - GENERATED VARIABLES, DO NOT EDIT!
|
13
|
+
///////////////////////////////////////////
|
14
|
+
|
15
|
+
[id="plugins-{type}-{plugin}"]
|
16
|
+
|
17
|
+
=== Kafka
|
18
|
+
|
19
|
+
include::{include_path}/plugin_header.asciidoc[]
|
20
|
+
|
21
|
+
==== Description
|
22
|
+
|
23
|
+
This input will read events from a Kafka topic. It uses the 0.10 version of
|
24
|
+
the consumer API provided by Kafka to read messages from the broker.
|
25
|
+
|
26
|
+
Here's a compatibility matrix that shows the Kafka client versions that are compatible with each combination
|
27
|
+
of Logstash and the Kafka input plugin:
|
28
|
+
|
29
|
+
[options="header"]
|
30
|
+
|==========================================================
|
31
|
+
|Kafka Client Version |Logstash Version |Plugin Version |Why?
|
32
|
+
|0.8 |2.0.0 - 2.x.x |<3.0.0 |Legacy, 0.8 is still popular
|
33
|
+
|0.9 |2.0.0 - 2.3.x | 3.x.x |Works with the old Ruby Event API (`event['product']['price'] = 10`)
|
34
|
+
|0.9 |2.4.x - 5.x.x | 4.x.x |Works with the new getter/setter APIs (`event.set('[product][price]', 10)`)
|
35
|
+
|0.10.0.x |2.4.x - 5.x.x | 5.x.x |Not compatible with the <= 0.9 broker
|
36
|
+
|0.10.1.x |2.4.x - 5.x.x | 6.x.x |
|
37
|
+
|==========================================================
|
38
|
+
|
39
|
+
NOTE: We recommended that you use matching Kafka client and broker versions. During upgrades, you should
|
40
|
+
upgrade brokers before clients because brokers target backwards compatibility. For example, the 0.9 broker
|
41
|
+
is compatible with both the 0.8 consumer and 0.9 consumer APIs, but not the other way around.
|
42
|
+
|
43
|
+
This input supports connecting to Kafka over:
|
44
|
+
|
45
|
+
* SSL (requires plugin version 3.0.0 or later)
|
46
|
+
* Kerberos SASL (requires plugin version 5.1.0 or later)
|
47
|
+
|
48
|
+
By default security is disabled but can be turned on as needed.
|
49
|
+
|
50
|
+
The Logstash Kafka consumer handles group management and uses the default offset management
|
51
|
+
strategy using Kafka topics.
|
52
|
+
|
53
|
+
Logstash instances by default form a single logical group to subscribe to Kafka topics
|
54
|
+
Each Logstash Kafka consumer can run multiple threads to increase read throughput. Alternatively,
|
55
|
+
you could run multiple Logstash instances with the same `group_id` to spread the load across
|
56
|
+
physical machines. Messages in a topic will be distributed to all Logstash instances with
|
57
|
+
the same `group_id`.
|
58
|
+
|
59
|
+
Ideally you should have as many threads as the number of partitions for a perfect balance --
|
60
|
+
more threads than partitions means that some threads will be idle
|
61
|
+
|
62
|
+
For more information see http://kafka.apache.org/documentation.html#theconsumer
|
63
|
+
|
64
|
+
Kafka consumer configuration: http://kafka.apache.org/documentation.html#consumerconfigs
|
65
|
+
|
66
|
+
|
67
|
+
[id="plugins-{type}s-{plugin}-options"]
|
68
|
+
==== Kafka Input Configuration Options
|
69
|
+
|
70
|
+
This plugin supports the following configuration options plus the <<plugins-{type}s-common-options>> described later.
|
71
|
+
|
72
|
+
[cols="<,<,<",options="header",]
|
73
|
+
|=======================================================================
|
74
|
+
|Setting |Input type|Required
|
75
|
+
| <<plugins-{type}s-{plugin}-auto_commit_interval_ms>> |<<string,string>>|No
|
76
|
+
| <<plugins-{type}s-{plugin}-auto_offset_reset>> |<<string,string>>|No
|
77
|
+
| <<plugins-{type}s-{plugin}-bootstrap_servers>> |<<string,string>>|No
|
78
|
+
| <<plugins-{type}s-{plugin}-check_crcs>> |<<string,string>>|No
|
79
|
+
| <<plugins-{type}s-{plugin}-client_id>> |<<string,string>>|No
|
80
|
+
| <<plugins-{type}s-{plugin}-connections_max_idle_ms>> |<<string,string>>|No
|
81
|
+
| <<plugins-{type}s-{plugin}-consumer_threads>> |<<number,number>>|No
|
82
|
+
| <<plugins-{type}s-{plugin}-decorate_events>> |<<boolean,boolean>>|No
|
83
|
+
| <<plugins-{type}s-{plugin}-enable_auto_commit>> |<<string,string>>|No
|
84
|
+
| <<plugins-{type}s-{plugin}-exclude_internal_topics>> |<<string,string>>|No
|
85
|
+
| <<plugins-{type}s-{plugin}-fetch_max_bytes>> |<<string,string>>|No
|
86
|
+
| <<plugins-{type}s-{plugin}-fetch_max_wait_ms>> |<<string,string>>|No
|
87
|
+
| <<plugins-{type}s-{plugin}-fetch_min_bytes>> |<<string,string>>|No
|
88
|
+
| <<plugins-{type}s-{plugin}-group_id>> |<<string,string>>|No
|
89
|
+
| <<plugins-{type}s-{plugin}-heartbeat_interval_ms>> |<<string,string>>|No
|
90
|
+
| <<plugins-{type}s-{plugin}-jaas_path>> |a valid filesystem path|No
|
91
|
+
| <<plugins-{type}s-{plugin}-kerberos_config>> |a valid filesystem path|No
|
92
|
+
| <<plugins-{type}s-{plugin}-key_deserializer_class>> |<<string,string>>|No
|
93
|
+
| <<plugins-{type}s-{plugin}-max_partition_fetch_bytes>> |<<string,string>>|No
|
94
|
+
| <<plugins-{type}s-{plugin}-max_poll_interval_ms>> |<<string,string>>|No
|
95
|
+
| <<plugins-{type}s-{plugin}-max_poll_records>> |<<string,string>>|No
|
96
|
+
| <<plugins-{type}s-{plugin}-metadata_max_age_ms>> |<<string,string>>|No
|
97
|
+
| <<plugins-{type}s-{plugin}-partition_assignment_strategy>> |<<string,string>>|No
|
98
|
+
| <<plugins-{type}s-{plugin}-poll_timeout_ms>> |<<number,number>>|No
|
99
|
+
| <<plugins-{type}s-{plugin}-receive_buffer_bytes>> |<<string,string>>|No
|
100
|
+
| <<plugins-{type}s-{plugin}-reconnect_backoff_ms>> |<<string,string>>|No
|
101
|
+
| <<plugins-{type}s-{plugin}-request_timeout_ms>> |<<string,string>>|No
|
102
|
+
| <<plugins-{type}s-{plugin}-retry_backoff_ms>> |<<string,string>>|No
|
103
|
+
| <<plugins-{type}s-{plugin}-sasl_kerberos_service_name>> |<<string,string>>|No
|
104
|
+
| <<plugins-{type}s-{plugin}-sasl_mechanism>> |<<string,string>>|No
|
105
|
+
| <<plugins-{type}s-{plugin}-security_protocol>> |<<string,string>>, one of `["PLAINTEXT", "SSL", "SASL_PLAINTEXT", "SASL_SSL"]`|No
|
106
|
+
| <<plugins-{type}s-{plugin}-send_buffer_bytes>> |<<string,string>>|No
|
107
|
+
| <<plugins-{type}s-{plugin}-session_timeout_ms>> |<<string,string>>|No
|
108
|
+
| <<plugins-{type}s-{plugin}-ssl_key_password>> |<<password,password>>|No
|
109
|
+
| <<plugins-{type}s-{plugin}-ssl_keystore_location>> |a valid filesystem path|No
|
110
|
+
| <<plugins-{type}s-{plugin}-ssl_keystore_password>> |<<password,password>>|No
|
111
|
+
| <<plugins-{type}s-{plugin}-ssl_keystore_type>> |<<string,string>>|No
|
112
|
+
| <<plugins-{type}s-{plugin}-ssl_truststore_location>> |a valid filesystem path|No
|
113
|
+
| <<plugins-{type}s-{plugin}-ssl_truststore_password>> |<<password,password>>|No
|
114
|
+
| <<plugins-{type}s-{plugin}-ssl_truststore_type>> |<<string,string>>|No
|
115
|
+
| <<plugins-{type}s-{plugin}-topics>> |<<array,array>>|No
|
116
|
+
| <<plugins-{type}s-{plugin}-topics_pattern>> |<<string,string>>|No
|
117
|
+
| <<plugins-{type}s-{plugin}-value_deserializer_class>> |<<string,string>>|No
|
118
|
+
|=======================================================================
|
119
|
+
|
120
|
+
Also see <<plugins-{type}s-common-options>> for a list of options supported by all
|
121
|
+
input plugins.
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
[id="plugins-{type}s-{plugin}-auto_commit_interval_ms"]
|
126
|
+
===== `auto_commit_interval_ms`
|
127
|
+
|
128
|
+
* Value type is <<string,string>>
|
129
|
+
* Default value is `"5000"`
|
130
|
+
|
131
|
+
The frequency in milliseconds that the consumer offsets are committed to Kafka.
|
132
|
+
|
133
|
+
[id="plugins-{type}s-{plugin}-auto_offset_reset"]
|
134
|
+
===== `auto_offset_reset`
|
135
|
+
|
136
|
+
* Value type is <<string,string>>
|
137
|
+
* There is no default value for this setting.
|
138
|
+
|
139
|
+
What to do when there is no initial offset in Kafka or if an offset is out of range:
|
140
|
+
|
141
|
+
* earliest: automatically reset the offset to the earliest offset
|
142
|
+
* latest: automatically reset the offset to the latest offset
|
143
|
+
* none: throw exception to the consumer if no previous offset is found for the consumer's group
|
144
|
+
* anything else: throw exception to the consumer.
|
145
|
+
|
146
|
+
[id="plugins-{type}s-{plugin}-bootstrap_servers"]
|
147
|
+
===== `bootstrap_servers`
|
148
|
+
|
149
|
+
* Value type is <<string,string>>
|
150
|
+
* Default value is `"localhost:9092"`
|
151
|
+
|
152
|
+
A list of URLs of Kafka instances to use for establishing the initial connection to the cluster.
|
153
|
+
This list should be in the form of `host1:port1,host2:port2` These urls are just used
|
154
|
+
for the initial connection to discover the full cluster membership (which may change dynamically)
|
155
|
+
so this list need not contain the full set of servers (you may want more than one, though, in
|
156
|
+
case a server is down).
|
157
|
+
|
158
|
+
[id="plugins-{type}s-{plugin}-check_crcs"]
|
159
|
+
===== `check_crcs`
|
160
|
+
|
161
|
+
* Value type is <<string,string>>
|
162
|
+
* There is no default value for this setting.
|
163
|
+
|
164
|
+
Automatically check the CRC32 of the records consumed. This ensures no on-the-wire or on-disk
|
165
|
+
corruption to the messages occurred. This check adds some overhead, so it may be
|
166
|
+
disabled in cases seeking extreme performance.
|
167
|
+
|
168
|
+
[id="plugins-{type}s-{plugin}-client_id"]
|
169
|
+
===== `client_id`
|
170
|
+
|
171
|
+
* Value type is <<string,string>>
|
172
|
+
* Default value is `"logstash"`
|
173
|
+
|
174
|
+
The id string to pass to the server when making requests. The purpose of this
|
175
|
+
is to be able to track the source of requests beyond just ip/port by allowing
|
176
|
+
a logical application name to be included.
|
177
|
+
|
178
|
+
[id="plugins-{type}s-{plugin}-connections_max_idle_ms"]
|
179
|
+
===== `connections_max_idle_ms`
|
180
|
+
|
181
|
+
* Value type is <<string,string>>
|
182
|
+
* There is no default value for this setting.
|
183
|
+
|
184
|
+
Close idle connections after the number of milliseconds specified by this config.
|
185
|
+
|
186
|
+
[id="plugins-{type}s-{plugin}-consumer_threads"]
|
187
|
+
===== `consumer_threads`
|
188
|
+
|
189
|
+
* Value type is <<number,number>>
|
190
|
+
* Default value is `1`
|
191
|
+
|
192
|
+
Ideally you should have as many threads as the number of partitions for a perfect
|
193
|
+
balance — more threads than partitions means that some threads will be idle
|
194
|
+
|
195
|
+
[id="plugins-{type}s-{plugin}-decorate_events"]
|
196
|
+
===== `decorate_events`
|
197
|
+
|
198
|
+
* Value type is <<boolean,boolean>>
|
199
|
+
* Default value is `false`
|
200
|
+
|
201
|
+
Option to add Kafka metadata like topic, message size to the event.
|
202
|
+
This will add a field named `kafka` to the logstash event containing the following attributes:
|
203
|
+
`topic`: The topic this message is associated with
|
204
|
+
`consumer_group`: The consumer group used to read in this event
|
205
|
+
`partition`: The partition this message is associated with
|
206
|
+
`offset`: The offset from the partition this message is associated with
|
207
|
+
`key`: A ByteBuffer containing the message key
|
208
|
+
|
209
|
+
[id="plugins-{type}s-{plugin}-enable_auto_commit"]
|
210
|
+
===== `enable_auto_commit`
|
211
|
+
|
212
|
+
* Value type is <<string,string>>
|
213
|
+
* Default value is `"true"`
|
214
|
+
|
215
|
+
If true, periodically commit to Kafka the offsets of messages already returned by the consumer.
|
216
|
+
This committed offset will be used when the process fails as the position from
|
217
|
+
which the consumption will begin.
|
218
|
+
|
219
|
+
[id="plugins-{type}s-{plugin}-exclude_internal_topics"]
|
220
|
+
===== `exclude_internal_topics`
|
221
|
+
|
222
|
+
* Value type is <<string,string>>
|
223
|
+
* There is no default value for this setting.
|
224
|
+
|
225
|
+
Whether records from internal topics (such as offsets) should be exposed to the consumer.
|
226
|
+
If set to true the only way to receive records from an internal topic is subscribing to it.
|
227
|
+
|
228
|
+
[id="plugins-{type}s-{plugin}-fetch_max_bytes"]
|
229
|
+
===== `fetch_max_bytes`
|
230
|
+
|
231
|
+
* Value type is <<string,string>>
|
232
|
+
* There is no default value for this setting.
|
233
|
+
|
234
|
+
The maximum amount of data the server should return for a fetch request. This is not an
|
235
|
+
absolute maximum, if the first message in the first non-empty partition of the fetch is larger
|
236
|
+
than this value, the message will still be returned to ensure that the consumer can make progress.
|
237
|
+
|
238
|
+
[id="plugins-{type}s-{plugin}-fetch_max_wait_ms"]
|
239
|
+
===== `fetch_max_wait_ms`
|
240
|
+
|
241
|
+
* Value type is <<string,string>>
|
242
|
+
* There is no default value for this setting.
|
243
|
+
|
244
|
+
The maximum amount of time the server will block before answering the fetch request if
|
245
|
+
there isn't sufficient data to immediately satisfy `fetch_min_bytes`. This
|
246
|
+
should be less than or equal to the timeout used in `poll_timeout_ms`
|
247
|
+
|
248
|
+
[id="plugins-{type}s-{plugin}-fetch_min_bytes"]
|
249
|
+
===== `fetch_min_bytes`
|
250
|
+
|
251
|
+
* Value type is <<string,string>>
|
252
|
+
* There is no default value for this setting.
|
253
|
+
|
254
|
+
The minimum amount of data the server should return for a fetch request. If insufficient
|
255
|
+
data is available the request will wait for that much data to accumulate
|
256
|
+
before answering the request.
|
257
|
+
|
258
|
+
[id="plugins-{type}s-{plugin}-group_id"]
|
259
|
+
===== `group_id`
|
260
|
+
|
261
|
+
* Value type is <<string,string>>
|
262
|
+
* Default value is `"logstash"`
|
263
|
+
|
264
|
+
The identifier of the group this consumer belongs to. Consumer group is a single logical subscriber
|
265
|
+
that happens to be made up of multiple processors. Messages in a topic will be distributed to all
|
266
|
+
Logstash instances with the same `group_id`
|
267
|
+
|
268
|
+
[id="plugins-{type}s-{plugin}-heartbeat_interval_ms"]
|
269
|
+
===== `heartbeat_interval_ms`
|
270
|
+
|
271
|
+
* Value type is <<string,string>>
|
272
|
+
* There is no default value for this setting.
|
273
|
+
|
274
|
+
The expected time between heartbeats to the consumer coordinator. Heartbeats are used to ensure
|
275
|
+
that the consumer's session stays active and to facilitate rebalancing when new
|
276
|
+
consumers join or leave the group. The value must be set lower than
|
277
|
+
`session.timeout.ms`, but typically should be set no higher than 1/3 of that value.
|
278
|
+
It can be adjusted even lower to control the expected time for normal rebalances.
|
279
|
+
|
280
|
+
[id="plugins-{type}s-{plugin}-jaas_path"]
|
281
|
+
===== `jaas_path`
|
282
|
+
|
283
|
+
* Value type is <<path,path>>
|
284
|
+
* There is no default value for this setting.
|
285
|
+
|
286
|
+
The Java Authentication and Authorization Service (JAAS) API supplies user authentication and authorization
|
287
|
+
services for Kafka. This setting provides the path to the JAAS file. Sample JAAS file for Kafka client:
|
288
|
+
[source,java]
|
289
|
+
----------------------------------
|
290
|
+
KafkaClient {
|
291
|
+
com.sun.security.auth.module.Krb5LoginModule required
|
292
|
+
useTicketCache=true
|
293
|
+
renewTicket=true
|
294
|
+
serviceName="kafka";
|
295
|
+
};
|
296
|
+
----------------------------------
|
297
|
+
|
298
|
+
Please note that specifying `jaas_path` and `kerberos_config` in the config file will add these
|
299
|
+
to the global JVM system properties. This means if you have multiple Kafka inputs, all of them would be sharing the same
|
300
|
+
`jaas_path` and `kerberos_config`. If this is not desirable, you would have to run separate instances of Logstash on
|
301
|
+
different JVM instances.
|
302
|
+
|
303
|
+
[id="plugins-{type}s-{plugin}-kerberos_config"]
|
304
|
+
===== `kerberos_config`
|
305
|
+
|
306
|
+
* Value type is <<path,path>>
|
307
|
+
* There is no default value for this setting.
|
308
|
+
|
309
|
+
Optional path to kerberos config file. This is krb5.conf style as detailed in https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html
|
310
|
+
|
311
|
+
[id="plugins-{type}s-{plugin}-key_deserializer_class"]
|
312
|
+
===== `key_deserializer_class`
|
313
|
+
|
314
|
+
* Value type is <<string,string>>
|
315
|
+
* Default value is `"org.apache.kafka.common.serialization.StringDeserializer"`
|
316
|
+
|
317
|
+
Java Class used to deserialize the record's key
|
318
|
+
|
319
|
+
[id="plugins-{type}s-{plugin}-max_partition_fetch_bytes"]
|
320
|
+
===== `max_partition_fetch_bytes`
|
321
|
+
|
322
|
+
* Value type is <<string,string>>
|
323
|
+
* There is no default value for this setting.
|
324
|
+
|
325
|
+
The maximum amount of data per-partition the server will return. The maximum total memory used for a
|
326
|
+
request will be <code>#partitions * max.partition.fetch.bytes</code>. This size must be at least
|
327
|
+
as large as the maximum message size the server allows or else it is possible for the producer to
|
328
|
+
send messages larger than the consumer can fetch. If that happens, the consumer can get stuck trying
|
329
|
+
to fetch a large message on a certain partition.
|
330
|
+
|
331
|
+
[id="plugins-{type}s-{plugin}-max_poll_interval_ms"]
|
332
|
+
===== `max_poll_interval_ms`
|
333
|
+
|
334
|
+
* Value type is <<string,string>>
|
335
|
+
* There is no default value for this setting.
|
336
|
+
|
337
|
+
The maximum delay between invocations of poll() when using consumer group management. This places
|
338
|
+
an upper bound on the amount of time that the consumer can be idle before fetching more records.
|
339
|
+
If poll() is not called before expiration of this timeout, then the consumer is considered failed and
|
340
|
+
the group will rebalance in order to reassign the partitions to another member.
|
341
|
+
The value of the configuration `request_timeout_ms` must always be larger than max_poll_interval_ms
|
342
|
+
|
343
|
+
[id="plugins-{type}s-{plugin}-max_poll_records"]
|
344
|
+
===== `max_poll_records`
|
345
|
+
|
346
|
+
* Value type is <<string,string>>
|
347
|
+
* There is no default value for this setting.
|
348
|
+
|
349
|
+
The maximum number of records returned in a single call to poll().
|
350
|
+
|
351
|
+
[id="plugins-{type}s-{plugin}-metadata_max_age_ms"]
|
352
|
+
===== `metadata_max_age_ms`
|
353
|
+
|
354
|
+
* Value type is <<string,string>>
|
355
|
+
* There is no default value for this setting.
|
356
|
+
|
357
|
+
The period of time in milliseconds after which we force a refresh of metadata even if
|
358
|
+
we haven't seen any partition leadership changes to proactively discover any new brokers or partitions
|
359
|
+
|
360
|
+
[id="plugins-{type}s-{plugin}-partition_assignment_strategy"]
|
361
|
+
===== `partition_assignment_strategy`
|
362
|
+
|
363
|
+
* Value type is <<string,string>>
|
364
|
+
* There is no default value for this setting.
|
365
|
+
|
366
|
+
The class name of the partition assignment strategy that the client will use to distribute
|
367
|
+
partition ownership amongst consumer instances
|
368
|
+
|
369
|
+
[id="plugins-{type}s-{plugin}-poll_timeout_ms"]
|
370
|
+
===== `poll_timeout_ms`
|
371
|
+
|
372
|
+
* Value type is <<number,number>>
|
373
|
+
* Default value is `100`
|
374
|
+
|
375
|
+
Time kafka consumer will wait to receive new messages from topics
|
376
|
+
|
377
|
+
[id="plugins-{type}s-{plugin}-receive_buffer_bytes"]
|
378
|
+
===== `receive_buffer_bytes`
|
379
|
+
|
380
|
+
* Value type is <<string,string>>
|
381
|
+
* There is no default value for this setting.
|
382
|
+
|
383
|
+
The size of the TCP receive buffer (SO_RCVBUF) to use when reading data.
|
384
|
+
|
385
|
+
[id="plugins-{type}s-{plugin}-reconnect_backoff_ms"]
|
386
|
+
===== `reconnect_backoff_ms`
|
387
|
+
|
388
|
+
* Value type is <<string,string>>
|
389
|
+
* There is no default value for this setting.
|
390
|
+
|
391
|
+
The amount of time to wait before attempting to reconnect to a given host.
|
392
|
+
This avoids repeatedly connecting to a host in a tight loop.
|
393
|
+
This backoff applies to all requests sent by the consumer to the broker.
|
394
|
+
|
395
|
+
[id="plugins-{type}s-{plugin}-request_timeout_ms"]
|
396
|
+
===== `request_timeout_ms`
|
397
|
+
|
398
|
+
* Value type is <<string,string>>
|
399
|
+
* There is no default value for this setting.
|
400
|
+
|
401
|
+
The configuration controls the maximum amount of time the client will wait
|
402
|
+
for the response of a request. If the response is not received before the timeout
|
403
|
+
elapses the client will resend the request if necessary or fail the request if
|
404
|
+
retries are exhausted.
|
405
|
+
|
406
|
+
[id="plugins-{type}s-{plugin}-retry_backoff_ms"]
|
407
|
+
===== `retry_backoff_ms`
|
408
|
+
|
409
|
+
* Value type is <<string,string>>
|
410
|
+
* There is no default value for this setting.
|
411
|
+
|
412
|
+
The amount of time to wait before attempting to retry a failed fetch request
|
413
|
+
to a given topic partition. This avoids repeated fetching-and-failing in a tight loop.
|
414
|
+
|
415
|
+
[id="plugins-{type}s-{plugin}-sasl_kerberos_service_name"]
|
416
|
+
===== `sasl_kerberos_service_name`
|
417
|
+
|
418
|
+
* Value type is <<string,string>>
|
419
|
+
* There is no default value for this setting.
|
420
|
+
|
421
|
+
The Kerberos principal name that Kafka broker runs as.
|
422
|
+
This can be defined either in Kafka's JAAS config or in Kafka's config.
|
423
|
+
|
424
|
+
[id="plugins-{type}s-{plugin}-sasl_mechanism"]
|
425
|
+
===== `sasl_mechanism`
|
426
|
+
|
427
|
+
* Value type is <<string,string>>
|
428
|
+
* Default value is `"GSSAPI"`
|
429
|
+
|
430
|
+
http://kafka.apache.org/documentation.html#security_sasl[SASL mechanism] used for client connections.
|
431
|
+
This may be any mechanism for which a security provider is available.
|
432
|
+
GSSAPI is the default mechanism.
|
433
|
+
|
434
|
+
[id="plugins-{type}s-{plugin}-security_protocol"]
|
435
|
+
===== `security_protocol`
|
436
|
+
|
437
|
+
* Value can be any of: `PLAINTEXT`, `SSL`, `SASL_PLAINTEXT`, `SASL_SSL`
|
438
|
+
* Default value is `"PLAINTEXT"`
|
439
|
+
|
440
|
+
Security protocol to use, which can be either of PLAINTEXT,SSL,SASL_PLAINTEXT,SASL_SSL
|
441
|
+
|
442
|
+
[id="plugins-{type}s-{plugin}-send_buffer_bytes"]
|
443
|
+
===== `send_buffer_bytes`
|
444
|
+
|
445
|
+
* Value type is <<string,string>>
|
446
|
+
* There is no default value for this setting.
|
447
|
+
|
448
|
+
The size of the TCP send buffer (SO_SNDBUF) to use when sending data
|
449
|
+
|
450
|
+
[id="plugins-{type}s-{plugin}-session_timeout_ms"]
|
451
|
+
===== `session_timeout_ms`
|
452
|
+
|
453
|
+
* Value type is <<string,string>>
|
454
|
+
* There is no default value for this setting.
|
455
|
+
|
456
|
+
The timeout after which, if the `poll_timeout_ms` is not invoked, the consumer is marked dead
|
457
|
+
and a rebalance operation is triggered for the group identified by `group_id`
|
458
|
+
|
459
|
+
[id="plugins-{type}s-{plugin}-ssl"]
|
460
|
+
===== `ssl` (DEPRECATED)
|
461
|
+
|
462
|
+
* DEPRECATED WARNING: This configuration item is deprecated and may not be available in future versions.
|
463
|
+
* Value type is <<boolean,boolean>>
|
464
|
+
* Default value is `false`
|
465
|
+
|
466
|
+
Enable SSL/TLS secured communication to Kafka broker.
|
467
|
+
|
468
|
+
[id="plugins-{type}s-{plugin}-ssl_key_password"]
|
469
|
+
===== `ssl_key_password`
|
470
|
+
|
471
|
+
* Value type is <<password,password>>
|
472
|
+
* There is no default value for this setting.
|
473
|
+
|
474
|
+
The password of the private key in the key store file.
|
475
|
+
|
476
|
+
[id="plugins-{type}s-{plugin}-ssl_keystore_location"]
|
477
|
+
===== `ssl_keystore_location`
|
478
|
+
|
479
|
+
* Value type is <<path,path>>
|
480
|
+
* There is no default value for this setting.
|
481
|
+
|
482
|
+
If client authentication is required, this setting stores the keystore path.
|
483
|
+
|
484
|
+
[id="plugins-{type}s-{plugin}-ssl_keystore_password"]
|
485
|
+
===== `ssl_keystore_password`
|
486
|
+
|
487
|
+
* Value type is <<password,password>>
|
488
|
+
* There is no default value for this setting.
|
489
|
+
|
490
|
+
If client authentication is required, this setting stores the keystore password
|
491
|
+
|
492
|
+
[id="plugins-{type}s-{plugin}-ssl_keystore_type"]
|
493
|
+
===== `ssl_keystore_type`
|
494
|
+
|
495
|
+
* Value type is <<string,string>>
|
496
|
+
* There is no default value for this setting.
|
497
|
+
|
498
|
+
The keystore type.
|
499
|
+
|
500
|
+
[id="plugins-{type}s-{plugin}-ssl_truststore_location"]
|
501
|
+
===== `ssl_truststore_location`
|
502
|
+
|
503
|
+
* Value type is <<path,path>>
|
504
|
+
* There is no default value for this setting.
|
505
|
+
|
506
|
+
The JKS truststore path to validate the Kafka broker's certificate.
|
507
|
+
|
508
|
+
[id="plugins-{type}s-{plugin}-ssl_truststore_password"]
|
509
|
+
===== `ssl_truststore_password`
|
510
|
+
|
511
|
+
* Value type is <<password,password>>
|
512
|
+
* There is no default value for this setting.
|
513
|
+
|
514
|
+
The truststore password
|
515
|
+
|
516
|
+
[id="plugins-{type}s-{plugin}-ssl_truststore_type"]
|
517
|
+
===== `ssl_truststore_type`
|
518
|
+
|
519
|
+
* Value type is <<string,string>>
|
520
|
+
* There is no default value for this setting.
|
521
|
+
|
522
|
+
The truststore type.
|
523
|
+
|
524
|
+
[id="plugins-{type}s-{plugin}-topics"]
|
525
|
+
===== `topics`
|
526
|
+
|
527
|
+
* Value type is <<array,array>>
|
528
|
+
* Default value is `["logstash"]`
|
529
|
+
|
530
|
+
A list of topics to subscribe to, defaults to ["logstash"].
|
531
|
+
|
532
|
+
[id="plugins-{type}s-{plugin}-topics_pattern"]
|
533
|
+
===== `topics_pattern`
|
534
|
+
|
535
|
+
* Value type is <<string,string>>
|
536
|
+
* There is no default value for this setting.
|
537
|
+
|
538
|
+
A topic regex pattern to subscribe to.
|
539
|
+
The topics configuration will be ignored when using this configuration.
|
540
|
+
|
541
|
+
[id="plugins-{type}s-{plugin}-value_deserializer_class"]
|
542
|
+
===== `value_deserializer_class`
|
543
|
+
|
544
|
+
* Value type is <<string,string>>
|
545
|
+
* Default value is `"org.apache.kafka.common.serialization.StringDeserializer"`
|
546
|
+
|
547
|
+
Java Class used to deserialize the record's value
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
+
include::{include_path}/{type}.asciidoc[]
|
Binary file
|
@@ -61,7 +61,7 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
|
|
61
61
|
# * none: throw exception to the consumer if no previous offset is found for the consumer's group
|
62
62
|
# * anything else: throw exception to the consumer.
|
63
63
|
config :auto_offset_reset, :validate => :string
|
64
|
-
# A list of URLs to use for establishing the initial connection to the cluster.
|
64
|
+
# A list of URLs of Kafka instances to use for establishing the initial connection to the cluster.
|
65
65
|
# This list should be in the form of `host1:port1,host2:port2` These urls are just used
|
66
66
|
# for the initial connection to discover the full cluster membership (which may change dynamically)
|
67
67
|
# so this list need not contain the full set of servers (you may want more than one, though, in
|
@@ -261,6 +261,10 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
|
|
261
261
|
logstash_queue << event
|
262
262
|
end
|
263
263
|
end
|
264
|
+
# Manual offset commit
|
265
|
+
if @enable_auto_commit == "false"
|
266
|
+
consumer.commitSync
|
267
|
+
end
|
264
268
|
end
|
265
269
|
rescue org.apache.kafka.common.errors.WakeupException => e
|
266
270
|
raise e if !stop?
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'logstash-input-kafka'
|
3
|
-
s.version = '6.
|
3
|
+
s.version = '6.3.0'
|
4
4
|
s.licenses = ['Apache License (2.0)']
|
5
5
|
s.summary = 'This input will read events from a Kafka topic. It uses the high level consumer API provided by Kafka to read messages from the broker'
|
6
6
|
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.require_paths = ['lib']
|
11
11
|
|
12
12
|
# Files
|
13
|
-
s.files = Dir[
|
13
|
+
s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", "VERSION", "docs/**/*"]
|
14
14
|
|
15
15
|
# Tests
|
16
16
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
# Special flag to let us know this is actually a logstash plugin
|
19
19
|
s.metadata = { 'logstash_plugin' => 'true', 'group' => 'input'}
|
20
20
|
|
21
|
-
s.requirements << "jar 'org.apache.kafka:kafka-clients', '0.10.
|
21
|
+
s.requirements << "jar 'org.apache.kafka:kafka-clients', '0.10.2.1'"
|
22
22
|
s.requirements << "jar 'org.slf4j:slf4j-log4j12', '1.7.21'"
|
23
23
|
s.requirements << "jar 'org.apache.logging.log4j:log4j-1.2-api', '2.6.2'"
|
24
24
|
|
@@ -17,6 +17,7 @@ describe "inputs/kafka", :integration => true do
|
|
17
17
|
let(:lz4_config) { { 'topics' => ['logstash_topic_lz4'], 'codec' => 'plain', 'group_id' => group_id_1, 'auto_offset_reset' => 'earliest'} }
|
18
18
|
let(:pattern_config) { { 'topics_pattern' => 'logstash_topic_.*', 'group_id' => group_id_2, 'codec' => 'plain', 'auto_offset_reset' => 'earliest'} }
|
19
19
|
let(:decorate_config) { { 'topics' => ['logstash_topic_plain'], 'codec' => 'plain', 'group_id' => group_id_3, 'auto_offset_reset' => 'earliest', 'decorate_events' => true} }
|
20
|
+
let(:manual_commit_config) { { 'topics' => ['logstash_topic_plain'], 'codec' => 'plain', 'group_id' => group_id_4, 'auto_offset_reset' => 'earliest', 'enable_auto_commit' => 'false'} }
|
20
21
|
let(:timeout_seconds) { 120 }
|
21
22
|
let(:num_events) { 103 }
|
22
23
|
|
@@ -109,4 +110,23 @@ describe "inputs/kafka", :integration => true do
|
|
109
110
|
expect(event.get("kafka")["consumer_group"]).to eq(group_id_3)
|
110
111
|
end
|
111
112
|
end
|
113
|
+
|
114
|
+
describe "#kafka-offset-commit" do
|
115
|
+
def thread_it(kafka_input, queue)
|
116
|
+
Thread.new do
|
117
|
+
begin
|
118
|
+
kafka_input.run(queue)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should manually commit offsets" do
|
124
|
+
kafka_input = LogStash::Inputs::Kafka.new(manual_commit_config)
|
125
|
+
queue = Array.new
|
126
|
+
t = thread_it(kafka_input, queue)
|
127
|
+
t.run
|
128
|
+
wait(timeout_seconds).for { queue.length }.to eq(num_events)
|
129
|
+
expect(queue.length).to eq(num_events)
|
130
|
+
end
|
131
|
+
end
|
112
132
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,39 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-input-kafka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elasticsearch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: jar-dependencies
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.3.2
|
20
14
|
requirement: !ruby/object:Gem::Requirement
|
21
15
|
requirements:
|
22
16
|
- - "~>"
|
23
17
|
- !ruby/object:Gem::Version
|
24
18
|
version: 0.3.2
|
19
|
+
name: jar-dependencies
|
25
20
|
prerelease: false
|
26
21
|
type: :development
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: logstash-core-plugin-api
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.60'
|
34
|
-
- - "<="
|
24
|
+
- - "~>"
|
35
25
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
26
|
+
version: 0.3.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
37
28
|
requirement: !ruby/object:Gem::Requirement
|
38
29
|
requirements:
|
39
30
|
- - ">="
|
@@ -42,46 +33,46 @@ dependencies:
|
|
42
33
|
- - "<="
|
43
34
|
- !ruby/object:Gem::Version
|
44
35
|
version: '2.99'
|
36
|
+
name: logstash-core-plugin-api
|
45
37
|
prerelease: false
|
46
38
|
type: :runtime
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: logstash-codec-json
|
49
39
|
version_requirements: !ruby/object:Gem::Requirement
|
50
40
|
requirements:
|
51
41
|
- - ">="
|
52
42
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
43
|
+
version: '1.60'
|
44
|
+
- - "<="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.99'
|
47
|
+
- !ruby/object:Gem::Dependency
|
54
48
|
requirement: !ruby/object:Gem::Requirement
|
55
49
|
requirements:
|
56
50
|
- - ">="
|
57
51
|
- !ruby/object:Gem::Version
|
58
52
|
version: '0'
|
53
|
+
name: logstash-codec-json
|
59
54
|
prerelease: false
|
60
55
|
type: :runtime
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: logstash-codec-plain
|
63
56
|
version_requirements: !ruby/object:Gem::Requirement
|
64
57
|
requirements:
|
65
58
|
- - ">="
|
66
59
|
- !ruby/object:Gem::Version
|
67
60
|
version: '0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
68
62
|
requirement: !ruby/object:Gem::Requirement
|
69
63
|
requirements:
|
70
64
|
- - ">="
|
71
65
|
- !ruby/object:Gem::Version
|
72
66
|
version: '0'
|
67
|
+
name: logstash-codec-plain
|
73
68
|
prerelease: false
|
74
69
|
type: :runtime
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: stud
|
77
70
|
version_requirements: !ruby/object:Gem::Requirement
|
78
71
|
requirements:
|
79
72
|
- - ">="
|
80
73
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0
|
82
|
-
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version: 0.1.0
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
85
76
|
requirement: !ruby/object:Gem::Requirement
|
86
77
|
requirements:
|
87
78
|
- - ">="
|
@@ -90,36 +81,45 @@ dependencies:
|
|
90
81
|
- - "<"
|
91
82
|
- !ruby/object:Gem::Version
|
92
83
|
version: 0.1.0
|
84
|
+
name: stud
|
93
85
|
prerelease: false
|
94
86
|
type: :runtime
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: logstash-devutils
|
97
87
|
version_requirements: !ruby/object:Gem::Requirement
|
98
88
|
requirements:
|
99
89
|
- - ">="
|
100
90
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
91
|
+
version: 0.0.22
|
92
|
+
- - "<"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 0.1.0
|
95
|
+
- !ruby/object:Gem::Dependency
|
102
96
|
requirement: !ruby/object:Gem::Requirement
|
103
97
|
requirements:
|
104
98
|
- - ">="
|
105
99
|
- !ruby/object:Gem::Version
|
106
100
|
version: '0'
|
101
|
+
name: logstash-devutils
|
107
102
|
prerelease: false
|
108
103
|
type: :development
|
109
|
-
- !ruby/object:Gem::Dependency
|
110
|
-
name: rspec-wait
|
111
104
|
version_requirements: !ruby/object:Gem::Requirement
|
112
105
|
requirements:
|
113
106
|
- - ">="
|
114
107
|
- !ruby/object:Gem::Version
|
115
108
|
version: '0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
116
110
|
requirement: !ruby/object:Gem::Requirement
|
117
111
|
requirements:
|
118
112
|
- - ">="
|
119
113
|
- !ruby/object:Gem::Version
|
120
114
|
version: '0'
|
115
|
+
name: rspec-wait
|
121
116
|
prerelease: false
|
122
117
|
type: :development
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
123
|
description: This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program
|
124
124
|
email: info@elastic.co
|
125
125
|
executables: []
|
@@ -133,12 +133,22 @@ files:
|
|
133
133
|
- LICENSE
|
134
134
|
- NOTICE.TXT
|
135
135
|
- README.md
|
136
|
+
- docs/index.asciidoc
|
137
|
+
- lib/log4j/log4j/1.2.17/log4j-1.2.17.jar
|
136
138
|
- lib/logstash-input-kafka_jars.rb
|
137
139
|
- lib/logstash/inputs/kafka.rb
|
140
|
+
- lib/net/jpountz/lz4/lz4/1.3.0/lz4-1.3.0.jar
|
141
|
+
- lib/org/apache/kafka/kafka-clients/0.10.2.1/kafka-clients-0.10.2.1.jar
|
142
|
+
- lib/org/apache/logging/log4j/log4j-1.2-api/2.6.2/log4j-1.2-api-2.6.2.jar
|
143
|
+
- lib/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar
|
144
|
+
- lib/org/apache/logging/log4j/log4j-core/2.6.2/log4j-core-2.6.2.jar
|
145
|
+
- lib/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar
|
146
|
+
- lib/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar
|
147
|
+
- lib/org/xerial/snappy/snappy-java/1.1.2.6/snappy-java-1.1.2.6.jar
|
138
148
|
- logstash-input-kafka.gemspec
|
139
149
|
- spec/integration/inputs/kafka_spec.rb
|
140
150
|
- spec/unit/inputs/kafka_spec.rb
|
141
|
-
- vendor/jar-dependencies/runtime-jars/kafka-clients-0.10.
|
151
|
+
- vendor/jar-dependencies/runtime-jars/kafka-clients-0.10.2.1.jar
|
142
152
|
- vendor/jar-dependencies/runtime-jars/log4j-1.2-api-2.6.2.jar
|
143
153
|
- vendor/jar-dependencies/runtime-jars/log4j-1.2.17.jar
|
144
154
|
- vendor/jar-dependencies/runtime-jars/log4j-api-2.6.2.jar
|
@@ -168,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
178
|
- !ruby/object:Gem::Version
|
169
179
|
version: '0'
|
170
180
|
requirements:
|
171
|
-
- jar 'org.apache.kafka:kafka-clients', '0.10.
|
181
|
+
- jar 'org.apache.kafka:kafka-clients', '0.10.2.1'
|
172
182
|
- jar 'org.slf4j:slf4j-log4j12', '1.7.21'
|
173
183
|
- jar 'org.apache.logging.log4j:log4j-1.2-api', '2.6.2'
|
174
184
|
rubyforge_project:
|
Binary file
|