sbmt-kafka_consumer 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e14fbca0f8cb5daec037424c3d443f57c68ff8e58e6490fcd265b64d9746ceb
4
- data.tar.gz: d3077ea80569c187a3d1fa2046ee92ddd6fcd256fb7ac908dedcee31ca6bf467
3
+ metadata.gz: 466c2702a664bfe4ad5916c115dddb574e2108a990af6b686c5eea3298fd3a4c
4
+ data.tar.gz: 140e5ea106e9374df42dab0e372be5ff3c547a33882391a4634e368fc93b8737
5
5
  SHA512:
6
- metadata.gz: b39990b437807097d4142638166a2f6655bc90b8e1a7c1e2ef4fc86238fcc46482fb318753e2e186f09b95949b943225baf76238656141d4393086bb5be5fa7a
7
- data.tar.gz: c6696572ef9a933faa0142cb24a51853e4a8961c4f9646081e3601d709e74df3c9f86fbca31ffa6493132f69ff75f06b715d956bbab0ad1aaecf4398a2b8830d
6
+ metadata.gz: fc45d190f2cd0646049392a75c3f7d1a77db081669855f13b4d3dedb6f1a143cea6830659dbff9273fbde5517e3f11259e127ecb6c5a48a08cd4f6c71bbd93ea
7
+ data.tar.gz: 852f8c6da38cdb110cb5832d85f9798001f9b2fbf3db56c5b492cca4e44dcb3fc47639b60e4e5d143c8420a0b3f0c7e1467433f31861100c0578de62c6f49bec
data/CHANGELOG.md CHANGED
@@ -13,6 +13,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
13
13
 
14
14
  ### Fixed
15
15
 
16
+ ## [2.3.0] - 2024-05-30
17
+
18
+ ### Added
19
+
20
+ - New config option `partition_assignment_strategy`
21
+
22
+ ### Changed
23
+
24
+ - Raise an exception when using the `partition.assignment.strategy` option within `kafka_options` for topics.
25
+
16
26
  ## [2.2.0] - 2024-05-13
17
27
 
18
28
  ### Changed
data/Gemfile CHANGED
@@ -3,3 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gemspec
6
+
7
+ # FIXME: remove this after drop support for Ruby 2.7
8
+ gem "ffi", "< 1.17"
data/README.md CHANGED
@@ -69,6 +69,7 @@ default: &default
69
69
  pause_timeout: 1
70
70
  pause_max_timeout: 30
71
71
  pause_with_exponential_backoff: true
72
+ partition_assignment_strategy: cooperative-sticky
72
73
  auth:
73
74
  kind: plaintext
74
75
  kafka:
@@ -155,6 +156,7 @@ auth:
155
156
  The `servers` key is required and should be in rdkafka format: without `kafka://` prefix, for example: `srv1:port1,srv2:port2,...`.
156
157
 
157
158
  The `kafka_config` section may contain any [rdkafka option](https://github.com/confluentinc/librdkafka/blob/master/CONFIGURATION.md). Also, `kafka_options` may be redefined for each topic.
159
+ Please note that the `partition.assignment.strategy` option within kafka_options is not supported for topics; instead, use the global option partition_assignment_strategy.
158
160
 
159
161
  ### `consumer_groups` config section
160
162
 
@@ -6,6 +6,8 @@ default: &default
6
6
  pause_timeout: 1
7
7
  pause_max_timeout: 30
8
8
  pause_with_exponential_backoff: true
9
+ ## available strategies: range, roundrobin, cooperative-sticky
10
+ # partition_assignment_strategy: "range,roundrobin"
9
11
  auth:
10
12
  kind: plaintext
11
13
  kafka:
@@ -25,7 +25,7 @@ class Sbmt::KafkaConsumer::Config < Anyway::Config
25
25
 
26
26
  attr_config :client_id,
27
27
  :pause_timeout, :pause_max_timeout, :pause_with_exponential_backoff,
28
- :max_wait_time, :shutdown_timeout,
28
+ :max_wait_time, :shutdown_timeout, :partition_assignment_strategy,
29
29
  concurrency: 4, auth: {}, kafka: {}, consumer_groups: {}, probes: {}, metrics: {},
30
30
  deserializer_class: "::Sbmt::KafkaConsumer::Serialization::NullDeserializer",
31
31
  monitor_class: "::Sbmt::KafkaConsumer::Instrumentation::TracingMonitor",
@@ -45,6 +45,7 @@ class Sbmt::KafkaConsumer::Config < Anyway::Config
45
45
  pause_with_exponential_backoff: :boolean,
46
46
  max_wait_time: :integer,
47
47
  shutdown_timeout: :integer,
48
+ partition_assignment_strategy: :string,
48
49
  concurrency: :integer
49
50
 
50
51
  coerce_types kafka: coerce_to(Kafka)
@@ -54,7 +55,10 @@ class Sbmt::KafkaConsumer::Config < Anyway::Config
54
55
  coerce_types consumer_groups: coerce_to_array_of(ConsumerGroup)
55
56
 
56
57
  def to_kafka_options
57
- kafka.to_kafka_options
58
+ {
59
+ "partition.assignment.strategy": partition_assignment_strategy
60
+ }.compact
61
+ .merge(kafka.to_kafka_options)
58
62
  .merge(auth.to_kafka_options)
59
63
  end
60
64
 
@@ -64,6 +68,9 @@ class Sbmt::KafkaConsumer::Config < Anyway::Config
64
68
  consumer_groups.each do |cg|
65
69
  raise_validation_error "consumer group #{cg.id} must have at least one topic defined" if cg.topics.blank?
66
70
  cg.topics.each do |t|
71
+ if t.kafka_options.key?(:"partition.assignment.strategy")
72
+ raise_validation_error "Using the partition.assignment.strategy option for individual topics is not supported due to consuming issues. Use the global option `partition_assignment_strategy` instead"
73
+ end
67
74
  raise_validation_error "topic #{cg.id}.topics.name[#{t.name}] contains invalid consumer class: no const #{t.consumer.klass} defined" unless t.consumer.klass.safe_constantize
68
75
  raise_validation_error "topic #{cg.id}.topics.name[#{t.name}] contains invalid deserializer class: no const #{t.deserializer.klass} defined" unless t.deserializer&.klass&.safe_constantize
69
76
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sbmt
4
4
  module KafkaConsumer
5
- VERSION = "2.2.0"
5
+ VERSION = "2.3.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sbmt-kafka_consumer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sbermarket Ruby-Platform Team