logstash-integration-kafka 11.8.6-java → 12.0.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -21
  3. data/docs/index.asciidoc +1 -1
  4. data/docs/input-kafka.asciidoc +18 -2
  5. data/docs/output-kafka.asciidoc +4 -26
  6. data/lib/logstash/inputs/kafka.rb +30 -2
  7. data/lib/logstash/outputs/kafka.rb +9 -24
  8. data/lib/logstash/plugin_mixins/kafka/common.rb +1 -1
  9. data/lib/logstash-integration-kafka_jars.rb +8 -30
  10. data/logstash-integration-kafka.gemspec +3 -3
  11. data/spec/fixtures/jaas.config +1 -1
  12. data/spec/fixtures/jaas3.config +5 -0
  13. data/spec/integration/inputs/kafka_spec.rb +66 -36
  14. data/spec/integration/outputs/kafka_spec.rb +4 -9
  15. data/spec/unit/inputs/kafka_spec.rb +0 -37
  16. data/vendor/jar-dependencies/com/github/luben/zstd-jni/1.5.6-10/zstd-jni-1.5.6-10.jar +0 -0
  17. data/vendor/jar-dependencies/io/confluent/kafka-avro-serializer/8.0.0/kafka-avro-serializer-8.0.0.jar +0 -0
  18. data/vendor/jar-dependencies/io/confluent/kafka-schema-registry-client/8.0.0/kafka-schema-registry-client-8.0.0.jar +0 -0
  19. data/vendor/jar-dependencies/io/confluent/kafka-schema-serializer/8.0.0/kafka-schema-serializer-8.0.0.jar +0 -0
  20. data/vendor/jar-dependencies/org/apache/kafka/kafka-clients/{3.9.2/kafka-clients-3.9.2.jar → 4.1.0/kafka-clients-4.1.0.jar} +0 -0
  21. data/vendor/jar-dependencies/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar +0 -0
  22. data/vendor/jar-dependencies/org/xerial/snappy/snappy-java/{1.1.10.5/snappy-java-1.1.10.5.jar → 1.1.10.7/snappy-java-1.1.10.7.jar} +0 -0
  23. metadata +12 -32
  24. data/vendor/jar-dependencies/at/yawk/lz4/lz4-java/1.10.1/lz4-java-1.10.1.jar +0 -0
  25. data/vendor/jar-dependencies/com/eclipsesource/minimal-json/minimal-json/0.9.5/minimal-json-0.9.5.jar +0 -0
  26. data/vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.16.0/jackson-annotations-2.16.0.jar +0 -0
  27. data/vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar +0 -0
  28. data/vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar +0 -0
  29. data/vendor/jar-dependencies/com/fasterxml/jackson/dataformat/jackson-dataformat-csv/2.16.0/jackson-dataformat-csv-2.16.0.jar +0 -0
  30. data/vendor/jar-dependencies/com/github/luben/zstd-jni/1.5.6-4/zstd-jni-1.5.6-4.jar +0 -0
  31. data/vendor/jar-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar +0 -0
  32. data/vendor/jar-dependencies/com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.jar +0 -0
  33. data/vendor/jar-dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar +0 -0
  34. data/vendor/jar-dependencies/com/google/guava/guava/32.0.1-jre/guava-32.0.1-jre.jar +0 -0
  35. data/vendor/jar-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +0 -0
  36. data/vendor/jar-dependencies/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar +0 -0
  37. data/vendor/jar-dependencies/com/google/re2j/re2j/1.6/re2j-1.6.jar +0 -0
  38. data/vendor/jar-dependencies/commons-codec/commons-codec/1.19.0/commons-codec-1.19.0.jar +0 -0
  39. data/vendor/jar-dependencies/commons-io/commons-io/2.20.0/commons-io-2.20.0.jar +0 -0
  40. data/vendor/jar-dependencies/io/confluent/common-utils/7.9.5/common-utils-7.9.5.jar +0 -0
  41. data/vendor/jar-dependencies/io/confluent/kafka-avro-serializer/7.9.5/kafka-avro-serializer-7.9.5.jar +0 -0
  42. data/vendor/jar-dependencies/io/confluent/kafka-schema-registry-client/7.9.5/kafka-schema-registry-client-7.9.5.jar +0 -0
  43. data/vendor/jar-dependencies/io/confluent/kafka-schema-serializer/7.9.5/kafka-schema-serializer-7.9.5.jar +0 -0
  44. data/vendor/jar-dependencies/io/confluent/logredactor/1.0.12/logredactor-1.0.12.jar +0 -0
  45. data/vendor/jar-dependencies/io/confluent/logredactor-metrics/1.0.12/logredactor-metrics-1.0.12.jar +0 -0
  46. data/vendor/jar-dependencies/io/swagger/core/v3/swagger-annotations/2.1.10/swagger-annotations-2.1.10.jar +0 -0
  47. data/vendor/jar-dependencies/org/apache/commons/commons-compress/1.28.0/commons-compress-1.28.0.jar +0 -0
  48. data/vendor/jar-dependencies/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar +0 -0
  49. data/vendor/jar-dependencies/org/checkerframework/checker-qual/3.33.0/checker-qual-3.33.0.jar +0 -0
  50. data/vendor/jar-dependencies/org/yaml/snakeyaml/2.0/snakeyaml-2.0.jar +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01affd92375e003285e4b4bd03a4c14fe35ec6712c215b5f06a98ff2c56780f9
4
- data.tar.gz: 2da5a10ef322b92e9fe1ba17e5d1df00244a07067746a723ecc7e5751ef79862
3
+ metadata.gz: 744abb784463992c54a691cf16cbab0eca25f9b5cc73a54d9808f15bca223021
4
+ data.tar.gz: d35f68e589ee17adb865b7edcb1c9627b1345e9de93c5037828c15e8e83defdb
5
5
  SHA512:
6
- metadata.gz: 830fd54d12d41b4eefbb510107c031d73faf3db1ec240b2f7a9eed3a1cf74ca9f53e23f1960f028cba722d6a1ef203a8a22179093ae7fea3e3ce33e84f810654
7
- data.tar.gz: 3d8563cd037862c2635223c6e1e40752a3de3228ff375a1f5d065f7498733d1c40c533d3dd8efce9c7a67356a5e45e6e428580edd5004d838fc4bdfbe36cc286
6
+ metadata.gz: b85e870af8ae8dc030320ecd0c9ad312d72cceacb64b2e0ac313ca3629b3a1c24a3029f1512485b79ccd68e272eccddfee1ac32a314dc562af7cc1762b82aa53
7
+ data.tar.gz: 89fe6266982b250eb000650c91d8fdfc653cfc02d9cdf570c743edd5d7290ffd1735b0fbc3b68b018fb65215b67a909cdc5bb1dfb05e025256b35de0cca6b1af
data/CHANGELOG.md CHANGED
@@ -1,24 +1,9 @@
1
- ## 11.8.6
2
- - [DOC] Add info about Kafka timestamp behavior [#241](https://github.com/logstash-plugins/logstash-integration-kafka/pull/241)
3
-
4
- ## 11.8.5
5
- - Redact `sasl_jaas_config` to prevent credentials from appearing in debug logs. [#237](https://github.com/logstash-plugins/logstash-integration-kafka/pull/237)
6
-
7
- ## 11.8.4
8
- - Upgrade kafka-avro-serializer dependency [#225](https://github.com/logstash-plugins/logstash-integration-kafka/pull/225)
9
-
10
- ## 11.8.3
11
- - Re-packaging the plugin [#223](https://github.com/logstash-plugins/logstash-integration-kafka/pull/223)
12
-
13
- ## 11.8.2
14
- - Upgrade transitive `org.apache.commons:commons-lang3` dependency [#217](https://github.com/logstash-plugins/logstash-integration-kafka/pull/217)
15
-
16
- ## 11.8.1
17
- - Upgrade lz4 dependency [#213](https://github.com/logstash-plugins/logstash-integration-kafka/pull/213)
18
-
19
- ## 11.8.0
20
- - Deprecate partitioner `default` and `uniform_sticky` options [#206](https://github.com/logstash-plugins/logstash-integration-kafka/pull/206)
21
- Both options are deprecated in Kafka client 3 and will be removed in the plugin 12.0.0.
1
+ ## 12.0.0
2
+ - Update kafka client to 4.1.0 and transitive dependencies [#205](https://github.com/logstash-plugins/logstash-integration-kafka/pull/205)
3
+ - Breaking Change: partitioner options `default` and `uniform_sticky` are removed
4
+ - `linger_ms` default value changed from 0 to 5
5
+ - Add `group_protocols` options for configuring Kafka consumer rebalance protocol
6
+ - Setting `group_protocols => consumer` opts in to the new consumer group protocol
22
7
 
23
8
  ## 11.7.0
24
9
  - Add `reconnect_backoff_max_ms` option for configuring kafka client [#204](https://github.com/logstash-plugins/logstash-integration-kafka/pull/204)
data/docs/index.asciidoc CHANGED
@@ -1,7 +1,7 @@
1
1
  :plugin: kafka
2
2
  :type: integration
3
3
  :no_codec:
4
- :kafka_client: 3.9.2
4
+ :kafka_client: 4.1.0
5
5
 
6
6
  ///////////////////////////////////////////
7
7
  START - GENERATED VARIABLES, DO NOT EDIT!
@@ -2,8 +2,8 @@
2
2
  :plugin: kafka
3
3
  :type: input
4
4
  :default_codec: plain
5
- :kafka_client: 3.9.2
6
- :kafka_client_doc: 39
5
+ :kafka_client: 4.1.0
6
+ :kafka_client_doc: 41
7
7
 
8
8
  ///////////////////////////////////////////
9
9
  START - GENERATED VARIABLES, DO NOT EDIT!
@@ -132,6 +132,7 @@ See the https://kafka.apache.org/{kafka_client_doc}/documentation for more detai
132
132
  | <<plugins-{type}s-{plugin}-fetch_min_bytes>> |<<number,number>>|No
133
133
  | <<plugins-{type}s-{plugin}-group_id>> |<<string,string>>|No
134
134
  | <<plugins-{type}s-{plugin}-group_instance_id>> |<<string,string>>|No
135
+ | <<plugins-{type}s-{plugin}-group_protocol>> |<<string,string>>|No
135
136
  | <<plugins-{type}s-{plugin}-heartbeat_interval_ms>> |<<number,number>>|No
136
137
  | <<plugins-{type}s-{plugin}-isolation_level>> |<<string,string>>|No
137
138
  | <<plugins-{type}s-{plugin}-jaas_path>> |a valid filesystem path|No
@@ -412,6 +413,21 @@ You can set this value to use information such as a hostname, an IP, or anything
412
413
  NOTE: In cases when multiple threads are configured and `consumer_threads` is greater than one, a suffix is appended to
413
414
  the `group_instance_id` to avoid collisions.
414
415
 
416
+ [id="plugins-{type}s-{plugin}-group_protocol"]
417
+ ===== `group_protocol`
418
+
419
+ * Value can be either of: `classic`, `consumer`
420
+ * Default value is `classic`.
421
+
422
+ Specifies the consumer group rebalance protocol used by the Kafka client.
423
+
424
+ `classic` is the default protocol. During a rebalance, all consumer instances pause message processing until partition assignments are complete.
425
+
426
+ `consumer` is an incremental rebalance protocol introduced in Kafka 4. It avoids global synchronization barriers by only pausing partitions that are reassigned.
427
+ When using `consumer`, the following settings **cannot be configured**:
428
+ `partition_assignment_strategy`, `heartbeat_interval_ms`, and `session_timeout_ms`.
429
+
430
+
415
431
  [id="plugins-{type}s-{plugin}-heartbeat_interval_ms"]
416
432
  ===== `heartbeat_interval_ms`
417
433
 
@@ -2,8 +2,8 @@
2
2
  :plugin: kafka
3
3
  :type: output
4
4
  :default_codec: plain
5
- :kafka_client: 3.9.2
6
- :kafka_client_doc: 39
5
+ :kafka_client: 4.1.0
6
+ :kafka_client_doc: 41
7
7
 
8
8
  ///////////////////////////////////////////
9
9
  START - GENERATED VARIABLES, DO NOT EDIT!
@@ -66,24 +66,6 @@ https://kafka.apache.org/{kafka_client_doc}/documentation.html#producerconfigs
66
66
 
67
67
  NOTE: This plugin does not support using a proxy when communicating to the Kafka broker.
68
68
 
69
- .Kafka timestamps and Logstash
70
- ****
71
- * Kafka 3.6+ introduces stricter timestamp validation with the introduction of two new broker/topic-level properties: https://docs.confluent.io/platform/current/installation/configuration/topic-configs.html#message-timestamp-before-max-ms[log.message.timestamp.before.max.ms] and
72
- https://docs.confluent.io/platform/current/installation/configuration/topic-configs.html#message-timestamp-after-max-ms[log.message.timestamp.after.max.ms].
73
- +
74
- These properties limit the time difference between the message timestamp (from Logstash) and the Kafka broker receive time.
75
- Messages can be rejected if the values are exceeded and `log.message.timestamp.type=CreateTime` is set.
76
- +
77
- These checks are ignored if `log.message.timestamp.type=LogAppendTime` is set.
78
-
79
- * For Kafka version 0.10.0.0+ the message creation timestamp is set by Logstash and equals the initial timestamp of the event.
80
- This behavior affects Kafka’s retention policy.
81
- For example, if a Logstash event was created two weeks ago and Kafka retention is set to seven days, then when the message arrives in Kafka today it may be discarded immediately, because its timestamp is older than seven days.
82
- +
83
- You can change this behavior by setting timestamps on message arrival instead.
84
- The message is not discarded but kept for 7 more days. Set `log.message.timestamp.type` to `LogAppendTime` (default `CreateTime`) in your Kafka configuration.
85
- ****
86
-
87
69
  [id="plugins-{type}s-{plugin}-aws_msk_iam_auth"]
88
70
  ==== AWS MSK IAM authentication
89
71
  If you use AWS MSK, the AWS MSK IAM access control enables you to handle both authentication and authorization for your MSK cluster with AWS IAM.
@@ -303,7 +285,7 @@ Serializer class for the key of the message
303
285
  ===== `linger_ms`
304
286
 
305
287
  * Value type is <<number,number>>
306
- * Default value is `0`
288
+ * Default value is `5`
307
289
 
308
290
  The producer groups together any records that arrive in between request
309
291
  transmissions into a single batched request. Normally this occurs only under
@@ -369,13 +351,9 @@ The max time in milliseconds before a metadata refresh is forced.
369
351
 
370
352
  By not setting this value, the plugin uses the built-in partitioning strategy provided by the Kafka client. Read more about the "partitioner.class" on the Kafka documentation.
371
353
 
372
- Available options are as follows:
354
+ Available option is as follows:
373
355
 
374
- * `default` hashes the `message_key` of an event to get the partition. When no message key is present, the plugin picks a partition in a round-robin fashion. Please note that this is a different strategy than the one used when `partitioner` is left unset.
375
356
  * `round_robin` distributes writes to all partitions equally, regardless of `message_key`
376
- * `uniform_sticky` hashes the `message_key` of an event to get the partition. When no message key is present, the plugin sticks to a partition for the duration of a batch than randomly picks a new one.
377
-
378
- NOTE: `default` and `uniform_sticky` are deprecated and will be removed in `12.0.0`.
379
357
 
380
358
  [id="plugins-{type}s-{plugin}-receive_buffer_bytes"]
381
359
  ===== `receive_buffer_bytes`
@@ -129,6 +129,12 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
129
129
  # consumer crated by each thread an artificial suffix is appended to the user provided `group_instance_id`
130
130
  # to avoid clashing.
131
131
  config :group_instance_id, :validate => :string
132
+ # `classic` is the "stop-the-world" rebalances.
133
+ # Any consumer restart or failure triggers a full-group rebalance, pausing processing for all consumers.
134
+ # `consumer` is an incremental rebalance protocol that avoids global sync barriers,
135
+ # pausing only the partitions that are reassigned.
136
+ # It cannot set along with `partition_assignment_strategy`, `heartbeat_interval_ms` and `session_timeout_ms`
137
+ config :group_protocol, :validate => ["classic", "consumer"], :default => "classic"
132
138
  # The expected time between heartbeats to the consumer coordinator. Heartbeats are used to ensure
133
139
  # that the consumer's session stays active and to facilitate rebalancing when new
134
140
  # consumers join or leave the group. The value must be set lower than
@@ -254,7 +260,7 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
254
260
  # different JVM instances.
255
261
  config :jaas_path, :validate => :path
256
262
  # JAAS configuration settings. This allows JAAS config to be a part of the plugin configuration and allows for different JAAS configuration per each plugin config.
257
- config :sasl_jaas_config, :validate => :password
263
+ config :sasl_jaas_config, :validate => :string
258
264
  # 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
259
265
  config :kerberos_config, :validate => :path
260
266
  # Option to add Kafka metadata like topic, message size and header key values to the event.
@@ -293,6 +299,8 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
293
299
  reassign_dns_lookup
294
300
  @pattern ||= java.util.regex.Pattern.compile(@topics_pattern) unless @topics_pattern.nil?
295
301
  check_schema_registry_parameters
302
+
303
+ set_group_protocol!
296
304
  end
297
305
 
298
306
  METADATA_NONE = Set[].freeze
@@ -450,6 +458,7 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
450
458
  props.put(kafka::FETCH_MIN_BYTES_CONFIG, fetch_min_bytes.to_s) unless fetch_min_bytes.nil?
451
459
  props.put(kafka::GROUP_ID_CONFIG, group_id)
452
460
  props.put(kafka::GROUP_INSTANCE_ID_CONFIG, group_instance_id) unless group_instance_id.nil?
461
+ props.put(kafka::GROUP_PROTOCOL_CONFIG, group_protocol)
453
462
  props.put(kafka::HEARTBEAT_INTERVAL_MS_CONFIG, heartbeat_interval_ms.to_s) unless heartbeat_interval_ms.nil?
454
463
  props.put(kafka::ISOLATION_LEVEL_CONFIG, isolation_level)
455
464
  props.put(kafka::KEY_DESERIALIZER_CLASS_CONFIG, key_deserializer_class)
@@ -471,7 +480,7 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
471
480
  props.put("security.protocol", security_protocol) unless security_protocol.nil?
472
481
  if schema_registry_url
473
482
  props.put(kafka::VALUE_DESERIALIZER_CLASS_CONFIG, Java::io.confluent.kafka.serializers.KafkaAvroDeserializer.java_class)
474
- serdes_config = Java::io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig
483
+ serdes_config = Java::io.confluent.kafka.serializers.AbstractKafkaSchemaSerDeConfig
475
484
  props.put(serdes_config::SCHEMA_REGISTRY_URL_CONFIG, schema_registry_url.uri.to_s)
476
485
  if schema_registry_proxy && !schema_registry_proxy.empty?
477
486
  props.put(serdes_config::PROXY_HOST, @schema_registry_proxy_host)
@@ -513,6 +522,25 @@ class LogStash::Inputs::Kafka < LogStash::Inputs::Base
513
522
  end
514
523
  end
515
524
 
525
+ # In order to use group_protocol => consumer, heartbeat_interval_ms, session_timeout_ms and partition_assignment_strategy need to be unset
526
+ # If any of these are not using the default value of the plugin, we raise a configuration error
527
+ def set_group_protocol!
528
+ return unless group_protocol == "consumer"
529
+
530
+ heartbeat_overridden = heartbeat_interval_ms != self.class.get_config.dig("heartbeat_interval_ms", :default)
531
+ session_overridden = session_timeout_ms != self.class.get_config.dig("session_timeout_ms", :default)
532
+ strategy_defined = !partition_assignment_strategy.nil?
533
+
534
+ if strategy_defined || heartbeat_overridden || session_overridden
535
+ raise LogStash::ConfigurationError, "group_protocol cannot be set to 'consumer' "\
536
+ "when any of partition_assignment_strategy, heartbeat_interval_ms or session_timeout_ms is set"
537
+ end
538
+
539
+ @heartbeat_interval_ms = nil
540
+ @session_timeout_ms = nil
541
+ logger.debug("Settings 'heartbeat_interval_ms' and 'session_timeout_ms' have been reset since 'group_protocol' is configured as 'consumer'")
542
+ end
543
+
516
544
  def partition_assignment_strategy_class
517
545
  case partition_assignment_strategy
518
546
  when 'range'
@@ -101,7 +101,7 @@ class LogStash::Outputs::Kafka < LogStash::Outputs::Base
101
101
  # This setting accomplishes this by adding a small amount of artificial delay—that is,
102
102
  # rather than immediately sending out a record the producer will wait for up to the given delay
103
103
  # to allow other records to be sent so that the sends can be batched together.
104
- config :linger_ms, :validate => :number, :default => 0 # Kafka default
104
+ config :linger_ms, :validate => :number, :default => 5 # Kafka default
105
105
  # The maximum size of a request
106
106
  config :max_request_size, :validate => :number, :default => 1_048_576 # (1MB) Kafka default
107
107
  # The key for the message
@@ -110,7 +110,7 @@ class LogStash::Outputs::Kafka < LogStash::Outputs::Base
110
110
  config :message_headers, :validate => :hash, :default => {}
111
111
  # the timeout setting for initial metadata request to fetch topic metadata.
112
112
  config :metadata_fetch_timeout_ms, :validate => :number, :default => 60_000
113
- # Partitioner to use - can be `default`, `uniform_sticky`, `round_robin` or a fully qualified class name of a custom partitioner.
113
+ # Partitioner to use - can be `round_robin` or a fully qualified class name of a custom partitioner.
114
114
  config :partitioner, :validate => :string
115
115
  # The size of the TCP receive buffer to use when reading data
116
116
  config :receive_buffer_bytes, :validate => :number, :default => 32_768 # (32KB) Kafka default
@@ -369,8 +369,8 @@ class LogStash::Outputs::Kafka < LogStash::Outputs::Base
369
369
  props.put(kafka::LINGER_MS_CONFIG, linger_ms.to_s)
370
370
  props.put(kafka::MAX_REQUEST_SIZE_CONFIG, max_request_size.to_s)
371
371
  props.put(kafka::METADATA_MAX_AGE_CONFIG, metadata_max_age_ms.to_s) unless metadata_max_age_ms.nil?
372
- unless partitioner.nil?
373
- props.put(kafka::PARTITIONER_CLASS_CONFIG, partitioner = partitioner_class)
372
+ partitioner_class&.tap do |partitioner|
373
+ props.put(kafka::PARTITIONER_CLASS_CONFIG, partitioner)
374
374
  logger.debug('producer configured using partitioner', :partitioner_class => partitioner)
375
375
  end
376
376
  props.put(kafka::RECEIVE_BUFFER_CONFIG, receive_buffer_bytes.to_s) unless receive_buffer_bytes.nil?
@@ -405,27 +405,12 @@ class LogStash::Outputs::Kafka < LogStash::Outputs::Base
405
405
  end
406
406
 
407
407
  def partitioner_class
408
- case partitioner
409
- when 'round_robin'
410
- 'org.apache.kafka.clients.producer.RoundRobinPartitioner'
411
- when 'uniform_sticky'
412
- log_partitioner_warning(partitioner, 'UniformStickyPartitioner')
413
- 'org.apache.kafka.clients.producer.UniformStickyPartitioner'
414
- when 'default'
415
- log_partitioner_warning(partitioner, 'DefaultPartitioner')
416
- 'org.apache.kafka.clients.producer.internals.DefaultPartitioner'
417
- else
418
- unless partitioner.index('.')
419
- raise LogStash::ConfigurationError, "unsupported partitioner: #{partitioner.inspect}"
420
- end
421
- partitioner # assume a fully qualified class-name
422
- end
423
- end
408
+ return nil if partitioner.nil?
409
+ return 'org.apache.kafka.clients.producer.RoundRobinPartitioner' if partitioner == 'round_robin'
410
+
411
+ raise LogStash::ConfigurationError, "unsupported partitioner: #{partitioner.inspect}" unless partitioner.include?('.')
424
412
 
425
- def log_partitioner_warning(partitioner, class_name)
426
- deprecation_logger.deprecated("Producer `partitioner` is configured with the deprecated option `#{partitioner}`. " \
427
- "#{class_name} is removed in kafka-client 4.0 and the `#{partitioner}` option will be removed in the plugin 12.0.0. "\
428
- 'Please update your configuration to use `round_robin` or unset the option to use the build-in partitioning strategy. ')
413
+ partitioner
429
414
  end
430
415
 
431
416
  end #class LogStash::Outputs::Kafka
@@ -40,7 +40,7 @@ module LogStash module PluginMixins module Kafka
40
40
  end
41
41
 
42
42
  props.put("sasl.kerberos.service.name", sasl_kerberos_service_name) unless sasl_kerberos_service_name.nil?
43
- props.put("sasl.jaas.config", sasl_jaas_config.value) unless sasl_jaas_config.nil?
43
+ props.put("sasl.jaas.config", sasl_jaas_config) unless sasl_jaas_config.nil?
44
44
  props.put("sasl.client.callback.handler.class", sasl_client_callback_handler_class) unless sasl_client_callback_handler_class.nil?
45
45
  props.put("sasl.oauthbearer.token.endpoint.url", sasl_oauthbearer_token_endpoint_url) unless sasl_oauthbearer_token_endpoint_url.nil?
46
46
  props.put("sasl.oauthbearer.scope.claim.name", sasl_oauthbearer_scope_claim_name) unless sasl_oauthbearer_scope_claim_name.nil?
@@ -1,35 +1,13 @@
1
1
  # AUTOGENERATED BY THE GRADLE SCRIPT. DO NOT EDIT.
2
2
 
3
3
  require 'jar_dependencies'
4
- require_jar('io.confluent', 'kafka-avro-serializer', '7.9.5')
5
- require_jar('org.apache.kafka', 'kafka-clients', '3.9.2')
6
- require_jar('at.yawk.lz4', 'lz4-java', '1.10.1')
7
- require_jar('io.confluent', 'kafka-schema-serializer', '7.9.5')
8
- require_jar('io.confluent', 'kafka-schema-registry-client', '7.9.5')
4
+ require_jar('io.confluent', 'kafka-avro-serializer', '8.0.0')
5
+ require_jar('io.confluent', 'kafka-schema-serializer', '8.0.0')
9
6
  require_jar('org.apache.avro', 'avro', '1.11.4')
10
- require_jar('org.apache.commons', 'commons-compress', '1.28.0')
11
- require_jar('com.google.guava', 'guava', '32.0.1-jre')
12
- require_jar('io.confluent', 'logredactor', '1.0.12')
13
- require_jar('io.confluent', 'common-utils', '7.9.5')
14
- require_jar('com.github.luben', 'zstd-jni', '1.5.6-4')
15
- require_jar('org.xerial.snappy', 'snappy-java', '1.1.10.5')
16
- require_jar('org.slf4j', 'slf4j-api', '1.7.36')
7
+ require_jar('io.confluent', 'kafka-schema-registry-client', '8.0.0')
17
8
  require_jar('com.fasterxml.jackson.datatype', 'jackson-datatype-jdk8', '2.16.0')
18
- require_jar('com.fasterxml.jackson.core', 'jackson-databind', '2.16.0')
19
- require_jar('com.fasterxml.jackson.core', 'jackson-annotations', '2.16.0')
20
- require_jar('com.fasterxml.jackson.dataformat', 'jackson-dataformat-csv', '2.16.0')
21
- require_jar('com.fasterxml.jackson.core', 'jackson-core', '2.16.0')
22
- require_jar('org.yaml', 'snakeyaml', '2.0')
23
- require_jar('io.swagger.core.v3', 'swagger-annotations', '2.1.10')
24
- require_jar('com.google.guava', 'failureaccess', '1.0.1')
25
- require_jar('com.google.guava', 'listenablefuture', '9999.0-empty-to-avoid-conflict-with-guava')
26
- require_jar('com.google.code.findbugs', 'jsr305', '3.0.2')
27
- require_jar('org.checkerframework', 'checker-qual', '3.33.0')
28
- require_jar('com.google.errorprone', 'error_prone_annotations', '2.18.0')
29
- require_jar('com.google.j2objc', 'j2objc-annotations', '2.8')
30
- require_jar('com.google.re2j', 're2j', '1.6')
31
- require_jar('io.confluent', 'logredactor-metrics', '1.0.12')
32
- require_jar('com.eclipsesource.minimal-json', 'minimal-json', '0.9.5')
33
- require_jar('commons-codec', 'commons-codec', '1.19.0')
34
- require_jar('commons-io', 'commons-io', '2.20.0')
35
- require_jar('org.apache.commons', 'commons-lang3', '3.18.0')
9
+ require_jar('org.apache.kafka', 'kafka-clients', '4.1.0')
10
+ require_jar('org.slf4j', 'slf4j-api', '1.7.36')
11
+ require_jar('com.github.luben', 'zstd-jni', '1.5.6-10')
12
+ require_jar('org.lz4', 'lz4-java', '1.8.0')
13
+ require_jar('org.xerial.snappy', 'snappy-java', '1.1.10.7')
@@ -1,14 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-integration-kafka'
3
- s.version = '11.8.6'
3
+ s.version = '12.0.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 "+
7
7
  "using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program."
8
8
  s.authors = ["Elastic"]
9
9
  s.email = 'info@elastic.co'
10
- s.homepage = "https://www.elastic.co/logstash"
11
- s.require_paths = %w[lib vendor/jar-dependencies]
10
+ s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
11
+ s.require_paths = ['lib', 'vendor/jar-dependencies']
12
12
 
13
13
  # Files
14
14
  s.files = Dir.glob(%w(
@@ -1,5 +1,5 @@
1
1
  SchemaRegistry-Props {
2
- org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
2
+ org.eclipse.jetty.security.jaas.spi.PropertyFileLoginModule required
3
3
  file="build/confluent_platform/etc/schema-registry/pwd"
4
4
  debug="true";
5
5
  };
@@ -0,0 +1,5 @@
1
+ SchemaRegistry-Props {
2
+ org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
3
+ file="build/confluent_platform/etc/schema-registry/pwd"
4
+ debug="true";
5
+ };
@@ -187,53 +187,83 @@ describe "inputs/kafka", :integration => true do
187
187
  end
188
188
  end
189
189
 
190
- # ToDo: add tests for other sasl config options as well (https://github.com/logstash-plugins/logstash-integration-kafka/issues/234)
191
- context 'setting sasl_jaas_config' do
192
- let(:base_config) do
193
- {
194
- 'topics' => ['logstash_integration_topic_plain'],
195
- 'group_id' => rand(36**8).to_s(36),
196
- }
190
+ context 'setting group_protocol' do
191
+ let(:test_topic) { 'logstash_integration_partitioner_topic' }
192
+ let(:consumer_config) do
193
+ plain_config.merge(
194
+ "topics" => [test_topic],
195
+ 'group_protocol' => group_protocol,
196
+ "partition_assignment_strategy" => partition_assignment_strategy,
197
+ "heartbeat_interval_ms" => heartbeat_interval_ms,
198
+ "session_timeout_ms" => session_timeout_ms
199
+ )
197
200
  end
201
+ let(:group_protocol) { nil }
202
+ let(:partition_assignment_strategy) { nil }
203
+ let(:heartbeat_interval_ms) { LogStash::Inputs::Kafka.get_config().dig("heartbeat_interval_ms", :default) }
204
+ let(:session_timeout_ms) { LogStash::Inputs::Kafka.get_config().dig("session_timeout_ms", :default) }
198
205
 
199
- shared_examples 'sasl_jaas_config password handling' do
200
- it 'stores sasl_jaas_config as password type' do
201
- kafka_input = LogStash::Inputs::Kafka.new(consumer_config)
202
- expect(kafka_input.sasl_jaas_config).to be_a(LogStash::Util::Password)
203
- expect(kafka_input.sasl_jaas_config.value).to eq(jaas_config_value)
204
- end
206
+ describe "group_protocol = classic" do
207
+ let(:group_protocol) { 'classic' }
205
208
 
206
- it 'does not expose password in inspect output' do
209
+ it 'passes register check' do
207
210
  kafka_input = LogStash::Inputs::Kafka.new(consumer_config)
208
- expect(kafka_input.sasl_jaas_config.inspect).to eq('<password>')
209
- expect(kafka_input.sasl_jaas_config.inspect).not_to include('admin-secret')
211
+ expect {
212
+ kafka_input.register
213
+ }.to_not raise_error
214
+
215
+ expect( kafka_input.instance_variable_get(:@heartbeat_interval_ms)).eql?(heartbeat_interval_ms)
216
+ expect( kafka_input.instance_variable_get(:@session_timeout_ms)).eql?(session_timeout_ms)
210
217
  end
211
218
  end
212
219
 
213
- context 'with single-line config' do
214
- let(:jaas_config_value) { 'org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";' }
215
- let(:consumer_config) { base_config.merge('sasl_jaas_config' => jaas_config_value) }
220
+ describe "group_protocol = consumer" do
221
+ let(:group_protocol) { 'consumer' }
216
222
 
217
- include_examples 'sasl_jaas_config password handling'
218
- end
223
+ describe "passes register check with supported config" do
224
+ it 'reset unsupported config to nil' do
225
+ kafka_input = LogStash::Inputs::Kafka.new(consumer_config)
226
+ expect {
227
+ kafka_input.register
228
+ }.to_not raise_error
219
229
 
220
- context 'with multiline config' do
221
- let(:jaas_config_value) do
222
- <<~JAAS
223
- org.apache.kafka.common.security.plain.PlainLoginModule required
224
- username="admin"
225
- password="admin-secret"
226
- user_admin="admin-secret"
227
- user_alice="alice-secret";
228
- JAAS
230
+ expect( kafka_input.instance_variable_get(:@heartbeat_interval_ms)).to be_nil
231
+ expect( kafka_input.instance_variable_get(:@session_timeout_ms)).to be_nil
232
+ end
233
+ end
234
+
235
+ {
236
+ partition_assignment_strategy: 'range',
237
+ heartbeat_interval_ms: 2000,
238
+ session_timeout_ms: 6000
239
+ }.each do |config_key, config_value|
240
+ context "with unsupported config #{config_key}" do
241
+ let(config_key) { config_value }
242
+
243
+ it 'raises LogStash::ConfigurationError' do
244
+ kafka_input = LogStash::Inputs::Kafka.new(consumer_config)
245
+ expect {
246
+ kafka_input.register
247
+ }.to raise_error(LogStash::ConfigurationError, /group_protocol cannot be set to.*consumer.*/)
248
+ end
249
+ end
229
250
  end
230
- let(:consumer_config) { base_config.merge('sasl_jaas_config' => jaas_config_value) }
231
251
 
232
- include_examples 'sasl_jaas_config password handling'
252
+ context "with valid config" do
253
+ let(:test_topic) { 'logstash_integration_topic_plain' }
254
+ let(:manual_commit_config) do
255
+ consumer_config.merge(
256
+ 'enable_auto_commit' => 'false'
257
+ )
258
+ end
259
+ it 'consume data' do
260
+ queue = consume_messages(manual_commit_config, timeout: timeout_seconds, event_count: num_events)
261
+ expect(queue.length).to eq(num_events)
262
+ end
263
+ end
233
264
  end
234
265
  end
235
266
 
236
-
237
267
  context "static membership 'group.instance.id' setting" do
238
268
  let(:base_config) do
239
269
  {
@@ -533,7 +563,7 @@ describe "Deserializing with the schema registry", :integration => true do
533
563
  def delete_topic_if_exists(topic_name, user = nil, password = nil)
534
564
  props = java.util.Properties.new
535
565
  props.put(Java::org.apache.kafka.clients.admin.AdminClientConfig::BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
536
- serdes_config = Java::io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig
566
+ serdes_config = Java::io.confluent.kafka.serializers.AbstractKafkaSchemaSerDeConfig
537
567
  unless user.nil?
538
568
  props.put(serdes_config::BASIC_AUTH_CREDENTIALS_SOURCE, 'USER_INFO')
539
569
  props.put(serdes_config::USER_INFO_CONFIG, "#{user}:#{password}")
@@ -542,7 +572,7 @@ describe "Deserializing with the schema registry", :integration => true do
542
572
  topics_list = admin_client.listTopics().names().get()
543
573
  if topics_list.contains(topic_name)
544
574
  result = admin_client.deleteTopics([topic_name])
545
- result.values.get(topic_name).get()
575
+ result.topicNameValues().get(topic_name).get()
546
576
  end
547
577
  end
548
578
 
@@ -550,7 +580,7 @@ describe "Deserializing with the schema registry", :integration => true do
550
580
  props = java.util.Properties.new
551
581
  config = org.apache.kafka.clients.producer.ProducerConfig
552
582
 
553
- serdes_config = Java::io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig
583
+ serdes_config = Java::io.confluent.kafka.serializers.AbstractKafkaSchemaSerDeConfig
554
584
  props.put(serdes_config::SCHEMA_REGISTRY_URL_CONFIG, "http://localhost:8081")
555
585
 
556
586
  props.put(config::BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
@@ -164,7 +164,7 @@ describe "outputs/kafka", :integration => true do
164
164
  let(:test_topic) { 'logstash_integration_topic3' }
165
165
 
166
166
  before :each do
167
- config = base_config.merge("topic_id" => test_topic, "partitioner" => 'org.apache.kafka.clients.producer.UniformStickyPartitioner')
167
+ config = base_config.merge("topic_id" => test_topic, "partitioner" => 'org.apache.kafka.clients.producer.RoundRobinPartitioner')
168
168
  load_kafka_data(config) do # let's have a bit more (diverse) dataset
169
169
  num_events.times.collect do
170
170
  LogStash::Event.new.tap do |e|
@@ -212,7 +212,7 @@ describe "outputs/kafka", :integration => true do
212
212
 
213
213
  context 'setting partitioner' do
214
214
  let(:test_topic) { 'logstash_integration_partitioner_topic' }
215
- let(:partitioner) { nil }
215
+ let(:partitioner) { 'round_robin' }
216
216
 
217
217
  before :each do
218
218
  @messages_offset = fetch_messages_from_all_partitions
@@ -221,13 +221,8 @@ describe "outputs/kafka", :integration => true do
221
221
  load_kafka_data(config)
222
222
  end
223
223
 
224
- [ 'default', 'round_robin', 'uniform_sticky' ].each do |partitioner|
225
- describe partitioner do
226
- let(:partitioner) { partitioner }
227
- it 'loads data' do
228
- expect(fetch_messages_from_all_partitions - @messages_offset).to eql num_events
229
- end
230
- end
224
+ it 'loads data' do
225
+ expect(fetch_messages_from_all_partitions - @messages_offset).to eql num_events
231
226
  end
232
227
 
233
228
  def fetch_messages_from_all_partitions
@@ -264,43 +264,6 @@ describe LogStash::Inputs::Kafka do
264
264
 
265
265
  expect(subject.send(:create_consumer, 'test-client-2', 'group_instance_id')).to be kafka_client
266
266
  end
267
-
268
- context 'with sasl_jaas_config' do
269
- shared_examples 'sasl_jaas_config password handling' do
270
- it "sasl_jaas_config.value returns the original string" do
271
- subject.register
272
- expect(subject.sasl_jaas_config.value).to eq(jaas_config_value)
273
- end
274
-
275
- it "sasl_jaas_config.inspect does not expose the password" do
276
- subject.register
277
- expect(subject.sasl_jaas_config.inspect).not_to include('admin-secret')
278
- expect(subject.sasl_jaas_config.inspect).to eq('<password>')
279
- end
280
- end
281
-
282
- context 'with single-line config' do
283
- let(:jaas_config_value) { 'org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";' }
284
- let(:config) { super().merge('sasl_jaas_config' => jaas_config_value) }
285
-
286
- include_examples 'sasl_jaas_config password handling'
287
- end
288
-
289
- context 'with multiline config' do
290
- let(:jaas_config_value) {
291
- <<~JAAS
292
- org.apache.kafka.common.security.plain.PlainLoginModule required
293
- username="admin"
294
- password="admin-secret"
295
- user_admin="admin-secret"
296
- user_alice="alice-secret";
297
- JAAS
298
- }
299
- let(:config) { super().merge('sasl_jaas_config' => jaas_config_value) }
300
-
301
- include_examples 'sasl_jaas_config password handling'
302
- end
303
- end
304
267
  end
305
268
 
306
269
  describe "schema registry" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-integration-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 11.8.6
4
+ version: 12.0.0
5
5
  platform: java
6
6
  authors:
7
7
  - Elastic
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-03-16 00:00:00.000000000 Z
10
+ date: 2025-10-16 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: logstash-core-plugin-api
@@ -235,6 +235,7 @@ files:
235
235
  - logstash-integration-kafka.gemspec
236
236
  - spec/check_docs_spec.rb
237
237
  - spec/fixtures/jaas.config
238
+ - spec/fixtures/jaas3.config
238
239
  - spec/fixtures/pwd
239
240
  - spec/fixtures/trust-store_stub.jks
240
241
  - spec/integration/inputs/kafka_spec.rb
@@ -242,39 +243,17 @@ files:
242
243
  - spec/unit/inputs/avro_schema_fixture_payment.asvc
243
244
  - spec/unit/inputs/kafka_spec.rb
244
245
  - spec/unit/outputs/kafka_spec.rb
245
- - vendor/jar-dependencies/at/yawk/lz4/lz4-java/1.10.1/lz4-java-1.10.1.jar
246
- - vendor/jar-dependencies/com/eclipsesource/minimal-json/minimal-json/0.9.5/minimal-json-0.9.5.jar
247
- - vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.16.0/jackson-annotations-2.16.0.jar
248
- - vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar
249
- - vendor/jar-dependencies/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar
250
- - vendor/jar-dependencies/com/fasterxml/jackson/dataformat/jackson-dataformat-csv/2.16.0/jackson-dataformat-csv-2.16.0.jar
251
246
  - vendor/jar-dependencies/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.16.0/jackson-datatype-jdk8-2.16.0.jar
252
- - vendor/jar-dependencies/com/github/luben/zstd-jni/1.5.6-4/zstd-jni-1.5.6-4.jar
253
- - vendor/jar-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar
254
- - vendor/jar-dependencies/com/google/errorprone/error_prone_annotations/2.18.0/error_prone_annotations-2.18.0.jar
255
- - vendor/jar-dependencies/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar
256
- - vendor/jar-dependencies/com/google/guava/guava/32.0.1-jre/guava-32.0.1-jre.jar
257
- - vendor/jar-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
258
- - vendor/jar-dependencies/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar
259
- - vendor/jar-dependencies/com/google/re2j/re2j/1.6/re2j-1.6.jar
260
- - vendor/jar-dependencies/commons-codec/commons-codec/1.19.0/commons-codec-1.19.0.jar
261
- - vendor/jar-dependencies/commons-io/commons-io/2.20.0/commons-io-2.20.0.jar
262
- - vendor/jar-dependencies/io/confluent/common-utils/7.9.5/common-utils-7.9.5.jar
263
- - vendor/jar-dependencies/io/confluent/kafka-avro-serializer/7.9.5/kafka-avro-serializer-7.9.5.jar
264
- - vendor/jar-dependencies/io/confluent/kafka-schema-registry-client/7.9.5/kafka-schema-registry-client-7.9.5.jar
265
- - vendor/jar-dependencies/io/confluent/kafka-schema-serializer/7.9.5/kafka-schema-serializer-7.9.5.jar
266
- - vendor/jar-dependencies/io/confluent/logredactor-metrics/1.0.12/logredactor-metrics-1.0.12.jar
267
- - vendor/jar-dependencies/io/confluent/logredactor/1.0.12/logredactor-1.0.12.jar
268
- - vendor/jar-dependencies/io/swagger/core/v3/swagger-annotations/2.1.10/swagger-annotations-2.1.10.jar
247
+ - vendor/jar-dependencies/com/github/luben/zstd-jni/1.5.6-10/zstd-jni-1.5.6-10.jar
248
+ - vendor/jar-dependencies/io/confluent/kafka-avro-serializer/8.0.0/kafka-avro-serializer-8.0.0.jar
249
+ - vendor/jar-dependencies/io/confluent/kafka-schema-registry-client/8.0.0/kafka-schema-registry-client-8.0.0.jar
250
+ - vendor/jar-dependencies/io/confluent/kafka-schema-serializer/8.0.0/kafka-schema-serializer-8.0.0.jar
269
251
  - vendor/jar-dependencies/org/apache/avro/avro/1.11.4/avro-1.11.4.jar
270
- - vendor/jar-dependencies/org/apache/commons/commons-compress/1.28.0/commons-compress-1.28.0.jar
271
- - vendor/jar-dependencies/org/apache/commons/commons-lang3/3.18.0/commons-lang3-3.18.0.jar
272
- - vendor/jar-dependencies/org/apache/kafka/kafka-clients/3.9.2/kafka-clients-3.9.2.jar
273
- - vendor/jar-dependencies/org/checkerframework/checker-qual/3.33.0/checker-qual-3.33.0.jar
252
+ - vendor/jar-dependencies/org/apache/kafka/kafka-clients/4.1.0/kafka-clients-4.1.0.jar
253
+ - vendor/jar-dependencies/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar
274
254
  - vendor/jar-dependencies/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar
275
- - vendor/jar-dependencies/org/xerial/snappy/snappy-java/1.1.10.5/snappy-java-1.1.10.5.jar
276
- - vendor/jar-dependencies/org/yaml/snakeyaml/2.0/snakeyaml-2.0.jar
277
- homepage: https://www.elastic.co/logstash
255
+ - vendor/jar-dependencies/org/xerial/snappy/snappy-java/1.1.10.7/snappy-java-1.1.10.7.jar
256
+ homepage: http://www.elastic.co/guide/en/logstash/current/index.html
278
257
  licenses:
279
258
  - Apache-2.0
280
259
  metadata:
@@ -302,6 +281,7 @@ summary: Integration with Kafka - input and output plugins
302
281
  test_files:
303
282
  - spec/check_docs_spec.rb
304
283
  - spec/fixtures/jaas.config
284
+ - spec/fixtures/jaas3.config
305
285
  - spec/fixtures/pwd
306
286
  - spec/fixtures/trust-store_stub.jks
307
287
  - spec/integration/inputs/kafka_spec.rb