ruby-kafka 0.6.2 → 0.6.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1f2b126f35425a1fde1e65ae5cac8d8e969416c77c00002a6eac744b23f91bf
4
- data.tar.gz: 07dfce70a3e142e4e1efe95fa089466f7d8dd2200f8e25787b9f917b2b6084ff
3
+ metadata.gz: b311a24cc8c5a81b7f0e7f930f4e0d28488d14ecaec2456ca482ac86889c3344
4
+ data.tar.gz: 8315a0b6b22bb4b7ef9393af789101508091b84ae895fb3a80250ba68ce61118
5
5
  SHA512:
6
- metadata.gz: 247ada1eb577419262b6d50aa82b3a39fadcd34e0fad625002786f50e26082c06f13d62ff69ec5a4f0c4791d10a922895e3af179ef38d2cf08e8621171966c03
7
- data.tar.gz: 5b12bcb7277c39ba03308074b6f0998019f4535a8484275b4b19614e7b9bca539f4e14a9edb8eea1b82439d872deec362c5305034d6d7c4d9b1bdb475025dd2b
6
+ metadata.gz: 7f1e7818c5276401f556a093e746c811d13f31c056d0c9f415bd5ef91ce38bbe50b7f9b1849ed5529c9e3e134261d147a89e27d10f31d268d8bb1e6335178a17
7
+ data.tar.gz: 5d79aa51abd414624f79e1f6d64a110ff57ee0adb289503a2862d383b1b9e73344718224d93f54fef0f59ffda004a845111626cb03b9c8d8623a47797159afc7
@@ -4,6 +4,10 @@ Changes and additions to the library will be listed here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ - Add support for the Describe Groups API (#583).
8
+
9
+ ## v0.6.2
10
+
7
11
  - Add list groups API (#582).
8
12
  - Use mutable String constructor (#584).
9
13
 
@@ -158,6 +158,12 @@ module Kafka
158
158
  send_request(request)
159
159
  end
160
160
 
161
+ def describe_groups(**options)
162
+ request = Protocol::DescribeGroupsRequest.new(**options)
163
+
164
+ send_request(request)
165
+ end
166
+
161
167
  private
162
168
 
163
169
  def send_request(request)
@@ -277,8 +277,19 @@ module Kafka
277
277
  # than the session window.
278
278
  # @param offset_retention_time [Integer] the time period that committed
279
279
  # offsets will be retained, in seconds. Defaults to the broker setting.
280
+ # @param fetcher_max_queue_size [Integer] max number of items in the fetch queue that
281
+ # are stored for further processing. Note, that each item in the queue represents a
282
+ # response from a single broker.
280
283
  # @return [Consumer]
281
- def consumer(group_id:, session_timeout: 30, offset_commit_interval: 10, offset_commit_threshold: 0, heartbeat_interval: 10, offset_retention_time: nil)
284
+ def consumer(
285
+ group_id:,
286
+ session_timeout: 30,
287
+ offset_commit_interval: 10,
288
+ offset_commit_threshold: 0,
289
+ heartbeat_interval: 10,
290
+ offset_retention_time: nil,
291
+ fetcher_max_queue_size: 100
292
+ )
282
293
  cluster = initialize_cluster
283
294
 
284
295
  instrumenter = DecoratingInstrumenter.new(@instrumenter, {
@@ -301,6 +312,7 @@ module Kafka
301
312
  cluster: initialize_cluster,
302
313
  logger: @logger,
303
314
  instrumenter: instrumenter,
315
+ max_queue_size: fetcher_max_queue_size
304
316
  )
305
317
 
306
318
  offset_manager = OffsetManager.new(
@@ -540,6 +552,14 @@ module Kafka
540
552
  @cluster.alter_topic(name, configs)
541
553
  end
542
554
 
555
+ # Describe a consumer group
556
+ #
557
+ # @param group_id [String] the id of the consumer group
558
+ # @return [Kafka::Protocol::DescribeGroupsResponse::Group]
559
+ def describe_group(group_id)
560
+ @cluster.describe_group(group_id)
561
+ end
562
+
543
563
  # Create partitions for a topic.
544
564
  #
545
565
  # @param name [String] the name of the topic.
@@ -255,6 +255,13 @@ module Kafka
255
255
  nil
256
256
  end
257
257
 
258
+ def describe_group(group_id)
259
+ response = get_group_coordinator(group_id: group_id).describe_groups(group_ids: [group_id])
260
+ group = response.groups.first
261
+ Protocol.handle_error(group.error_code)
262
+ group
263
+ end
264
+
258
265
  def create_partitions_for(name, num_partitions:, timeout:)
259
266
  options = {
260
267
  topics: [[name, num_partitions, nil]],
@@ -4,14 +4,13 @@ require "kafka/fetch_operation"
4
4
 
5
5
  module Kafka
6
6
  class Fetcher
7
- MAX_QUEUE_SIZE = 100
8
-
9
7
  attr_reader :queue
10
8
 
11
- def initialize(cluster:, logger:, instrumenter:)
9
+ def initialize(cluster:, logger:, instrumenter:, max_queue_size:)
12
10
  @cluster = cluster
13
11
  @logger = logger
14
12
  @instrumenter = instrumenter
13
+ @max_queue_size = max_queue_size
15
14
 
16
15
  @queue = Queue.new
17
16
  @commands = Queue.new
@@ -89,10 +88,10 @@ module Kafka
89
88
  send("handle_#{cmd}", *args)
90
89
  elsif !@running
91
90
  sleep 0.1
92
- elsif @queue.size < MAX_QUEUE_SIZE
91
+ elsif @queue.size < @max_queue_size
93
92
  step
94
93
  else
95
- @logger.warn "Reached max fetcher queue size (#{MAX_QUEUE_SIZE}), sleeping 1s"
94
+ @logger.warn "Reached max fetcher queue size (#{@max_queue_size}), sleeping 1s"
96
95
  sleep 1
97
96
  end
98
97
  end
@@ -25,6 +25,7 @@ module Kafka
25
25
  HEARTBEAT_API = 12
26
26
  LEAVE_GROUP_API = 13
27
27
  SYNC_GROUP_API = 14
28
+ DESCRIBE_GROUPS_API = 15
28
29
  LIST_GROUPS_API = 16
29
30
  SASL_HANDSHAKE_API = 17
30
31
  API_VERSIONS_API = 18
@@ -180,3 +181,5 @@ require "kafka/protocol/create_partitions_request"
180
181
  require "kafka/protocol/create_partitions_response"
181
182
  require "kafka/protocol/list_groups_request"
182
183
  require "kafka/protocol/list_groups_response"
184
+ require "kafka/protocol/describe_groups_request"
185
+ require "kafka/protocol/describe_groups_response"
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kafka
4
+ module Protocol
5
+ class DescribeGroupsRequest
6
+ def initialize(group_ids:)
7
+ @group_ids = group_ids
8
+ end
9
+
10
+ def api_key
11
+ DESCRIBE_GROUPS_API
12
+ end
13
+
14
+ def api_version
15
+ 0
16
+ end
17
+
18
+ def response_class
19
+ Protocol::DescribeGroupsResponse
20
+ end
21
+
22
+ def encode(encoder)
23
+ encoder.write_array(@group_ids) { |group_id| encoder.write_string(group_id) }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kafka
4
+ module Protocol
5
+ class DescribeGroupsResponse
6
+ class Group
7
+ attr_reader :error_code, :group_id, :state, :members, :protocol
8
+
9
+ def initialize(error_code:, group_id:, protocol_type:, protocol:, state:, members:)
10
+ @error_code = error_code
11
+ @group_id = group_id
12
+ @protocol_type = protocol_type
13
+ @protocol = protocol
14
+ @state = state
15
+ @members = members
16
+ end
17
+ end
18
+
19
+ class Member
20
+ attr_reader :member_id, :client_id, :client_host, :member_assignment
21
+
22
+ def initialize(member_id:, client_id:, client_host:, member_assignment:)
23
+ @member_id = member_id
24
+ @client_id = client_id
25
+ @client_host = client_host
26
+ @member_assignment = member_assignment
27
+ end
28
+ end
29
+
30
+ attr_reader :error_code, :groups
31
+
32
+ def initialize(groups:)
33
+ @groups = groups
34
+ end
35
+
36
+ def self.decode(decoder)
37
+ groups = decoder.array do
38
+ error_code = decoder.int16
39
+ group_id = decoder.string
40
+ state = decoder.string
41
+ protocol_type = decoder.string
42
+ protocol = decoder.string
43
+
44
+ members = decoder.array do
45
+ member_id = decoder.string
46
+ client_id = decoder.string
47
+ client_host = decoder.string
48
+ metadata = decoder.bytes
49
+ assignment = MemberAssignment.decode(Decoder.from_string(decoder.bytes))
50
+
51
+ Member.new(
52
+ member_id: member_id,
53
+ client_id: client_id,
54
+ client_host: client_host,
55
+ member_assignment: assignment
56
+ )
57
+ end
58
+
59
+ Group.new(
60
+ error_code: error_code,
61
+ group_id: group_id,
62
+ state: state,
63
+ protocol_type: protocol_type,
64
+ protocol: protocol,
65
+ members: members
66
+ )
67
+ end
68
+
69
+ new(groups: groups)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kafka
4
- VERSION = "0.6.2"
4
+ VERSION = "0.6.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Schierbeck
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-07 00:00:00.000000000 Z
11
+ date: 2018-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -351,6 +351,8 @@ files:
351
351
  - lib/kafka/protocol/delete_topics_response.rb
352
352
  - lib/kafka/protocol/describe_configs_request.rb
353
353
  - lib/kafka/protocol/describe_configs_response.rb
354
+ - lib/kafka/protocol/describe_groups_request.rb
355
+ - lib/kafka/protocol/describe_groups_response.rb
354
356
  - lib/kafka/protocol/encoder.rb
355
357
  - lib/kafka/protocol/fetch_request.rb
356
358
  - lib/kafka/protocol/fetch_response.rb