kafka-consumer 0.0.1 → 0.1.1

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
  SHA1:
3
- metadata.gz: ad31d35f34d283a73bc8865fc90e1748ecc48ffd
4
- data.tar.gz: 58fe93f719be96c3276604973b12887f42eb00f5
3
+ metadata.gz: 7e0b4f66c8e873f254c213a4d12ec89a2a46134a
4
+ data.tar.gz: 0dcc6b6cdce939337a51acebc95b9c7d8ac6b757
5
5
  SHA512:
6
- metadata.gz: 1ac246b560fe2f8ed24f71d9f32a0323f7d79dbbd1643a52e17fb2e524c027166f87dc12ad136ddcee0343c012fe27932a82ed26513a7184bb030a8fc5d4a64b
7
- data.tar.gz: 415dc58012fc48dba46a9d5ba34f6ea955fb78a194e3666c9d78f6e2767fdac76fd5decff989d7b4b52b1e31e054b3cca5b49abe337138ed9230ce3f82a92bdc
6
+ metadata.gz: 22f95d7e30a7c4e8c83b1e2ddea5c962a88b1655e19b68df9eadc670286f5a5ae98376b95e7eac9fd85e5f6c13d78e74f009787b5e0eaeb64f4217656a7df104
7
+ data.tar.gz: f4b831cb109d4ee7b05efa2c61cb3ba00874088e62b03d83af981c10ce411a4dc10535f56a163bc7058f0f5a7d27cac286dff4ef4ad4b359126f757f843583a0
data/README.md CHANGED
@@ -17,7 +17,7 @@ It's your responsibility to deal with this if that is a problem for you, e.g. by
17
17
 
18
18
  ## Usage
19
19
 
20
- First, add `kafka-consumer` to your **Gemfile**, and run `bundle install.
20
+ First, add `kafka-consumer` to your **Gemfile**, and run `bundle install`.
21
21
  If your messages are snappy-compressed, add the `snappy` gem as well.
22
22
 
23
23
  ``` ruby
@@ -18,12 +18,12 @@ module Kafka
18
18
  :max_wait_ms, :initial_offset,
19
19
  :logger
20
20
 
21
- def initialize(name, subscription, zookeeper: [], chroot: '', max_wait_ms: 200, initial_offset: :latest_offset, logger: nil)
21
+ def initialize(name, subscription, zookeeper: [], max_wait_ms: 200, initial_offset: :latest_offset, logger: nil)
22
22
  @name, @subscription = name, subscription
23
23
  @max_wait_ms, @initial_offset = max_wait_ms, initial_offset
24
24
  @logger = logger || Logger.new($stdout)
25
25
 
26
- @cluster = Kazoo::Cluster.new(zookeeper, chroot: chroot)
26
+ @cluster = Kazoo::Cluster.new(zookeeper)
27
27
  @group = Kazoo::Consumergroup.new(@cluster, name)
28
28
  @group.create unless @group.exists?
29
29
 
@@ -1,5 +1,5 @@
1
1
  module Kafka
2
2
  class Consumer
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -3,8 +3,7 @@ require 'thor'
3
3
 
4
4
  module Kazoo
5
5
  class CLI < Thor
6
- class_option :zookeeper, :type => :string, :default => ENV['ZOOKEEPER_PEERS']
7
- class_option :chroot, :type => :string, :default => ""
6
+ class_option :zookeeper, :type => :string, :default => ENV['ZOOKEEPER']
8
7
 
9
8
  desc "cluster", "Describes the Kafka cluster as registered in Zookeeper"
10
9
  def cluster
@@ -73,7 +72,7 @@ module Kazoo
73
72
  end
74
73
 
75
74
  def kafka_cluster
76
- @kafka_cluster ||= Kazoo::Cluster.new(options[:zookeeper], chroot: options[:chroot])
75
+ @kafka_cluster ||= Kazoo::Cluster.new(options[:zookeeper])
77
76
  end
78
77
  end
79
78
  end
@@ -1,10 +1,10 @@
1
1
  module Kazoo
2
2
  class Cluster
3
3
 
4
- attr_reader :zookeeper, :chroot
4
+ attr_reader :zookeeper
5
5
 
6
- def initialize(zookeeper, chroot: "")
7
- @zookeeper, @chroot = zookeeper, chroot
6
+ def initialize(zookeeper)
7
+ @zookeeper = zookeeper
8
8
  @zk_mutex, @brokers_mutex, @topics_mutex, @consumergroups_mutex = Mutex.new, Mutex.new, Mutex.new, Mutex.new
9
9
  end
10
10
 
@@ -17,11 +17,11 @@ module Kazoo
17
17
  def brokers
18
18
  @brokers_mutex.synchronize do
19
19
  @brokers ||= begin
20
- brokers = zk.get_children(path: node_with_chroot("/brokers/ids"))
20
+ brokers = zk.get_children(path: "/brokers/ids")
21
21
  result, threads, mutex = {}, ThreadGroup.new, Mutex.new
22
22
  brokers.fetch(:children).map do |id|
23
23
  t = Thread.new do
24
- broker_info = zk.get(path: node_with_chroot("/brokers/ids/#{id}"))
24
+ broker_info = zk.get(path: "/brokers/ids/#{id}")
25
25
  broker = Kazoo::Broker.from_json(self, id, JSON.parse(broker_info.fetch(:data)))
26
26
  mutex.synchronize { result[id.to_i] = broker }
27
27
  end
@@ -35,7 +35,7 @@ module Kazoo
35
35
 
36
36
  def consumergroups
37
37
  @consumergroups ||= begin
38
- consumers = zk.get_children(path: node_with_chroot("/consumers"))
38
+ consumers = zk.get_children(path: "/consumers")
39
39
  consumers.fetch(:children).map { |name| Kazoo::Consumergroup.new(self, name) }
40
40
  end
41
41
  end
@@ -43,11 +43,11 @@ module Kazoo
43
43
  def topics
44
44
  @topics_mutex.synchronize do
45
45
  @topics ||= begin
46
- topics = zk.get_children(path: node_with_chroot("/brokers/topics"))
46
+ topics = zk.get_children(path: "/brokers/topics")
47
47
  result, threads, mutex = {}, ThreadGroup.new, Mutex.new
48
48
  topics.fetch(:children).each do |name|
49
49
  t = Thread.new do
50
- topic_info = zk.get(path: node_with_chroot("/brokers/topics/#{name}"))
50
+ topic_info = zk.get(path: "/brokers/topics/#{name}")
51
51
  topic = Kazoo::Topic.from_json(self, name, JSON.parse(topic_info.fetch(:data)))
52
52
  mutex.synchronize { result[name] = topic }
53
53
  end
@@ -71,10 +71,6 @@ module Kazoo
71
71
  partitions.any?(&:under_replicated?)
72
72
  end
73
73
 
74
- def node_with_chroot(path)
75
- "#{@chroot}#{path}"
76
- end
77
-
78
74
  def close
79
75
  zk.close
80
76
  end
@@ -7,14 +7,14 @@ module Kazoo
7
7
  end
8
8
 
9
9
  def create
10
- cluster.zk.create(path: cluster.node_with_chroot("/consumers/#{name}"))
11
- cluster.zk.create(path: cluster.node_with_chroot("/consumers/#{name}/ids"))
12
- cluster.zk.create(path: cluster.node_with_chroot("/consumers/#{name}/owners"))
13
- cluster.zk.create(path: cluster.node_with_chroot("/consumers/#{name}/offsets"))
10
+ cluster.zk.create(path: "/consumers/#{name}")
11
+ cluster.zk.create(path: "/consumers/#{name}/ids")
12
+ cluster.zk.create(path: "/consumers/#{name}/owners")
13
+ cluster.zk.create(path: "/consumers/#{name}/offsets")
14
14
  end
15
15
 
16
16
  def exists?
17
- stat = cluster.zk.stat(path: cluster.node_with_chroot("/consumers/#{name}"))
17
+ stat = cluster.zk.stat(path: "/consumers/#{name}")
18
18
  stat.fetch(:stat).exists?
19
19
  end
20
20
 
@@ -24,23 +24,19 @@ module Kazoo
24
24
  end
25
25
 
26
26
  def instances
27
- instances = cluster.zk.get_children(path: cluster.node_with_chroot("/consumers/#{name}/ids"))
27
+ instances = cluster.zk.get_children(path: "/consumers/#{name}/ids")
28
28
  instances.fetch(:children).map { |id| Instance.new(self, id: id) }
29
29
  end
30
30
 
31
31
  def watch_instances(&block)
32
32
  cb = Zookeeper::Callbacks::WatcherCallback.create(&block)
33
- result = cluster.zk.get_children(
34
- path: cluster.node_with_chroot("/consumers/#{name}/ids"),
35
- watcher: cb,
36
- )
37
-
38
- instances = result.fetch(:children).map { |id| Instance.new(self, id: id) }
33
+ result = cluster.zk.get_children(path: "/consumers/#{name}/ids", watcher: cb)
39
34
 
40
35
  if result.fetch(:rc) != Zookeeper::Constants::ZOK
41
36
  raise Kazoo::Error, "Failed to watch instances. Error code result[:rc]"
42
37
  end
43
38
 
39
+ instances = result.fetch(:children).map { |id| Instance.new(self, id: id) }
44
40
  [instances, cb]
45
41
  end
46
42
 
@@ -48,10 +44,7 @@ module Kazoo
48
44
  def watch_partition_claim(partition, &block)
49
45
  cb = Zookeeper::Callbacks::WatcherCallback.create(&block)
50
46
 
51
- result = cluster.zk.get(
52
- path: cluster.node_with_chroot("/consumers/#{name}/owners/#{partition.topic.name}/#{partition.id}"),
53
- watcher: cb
54
- )
47
+ result = cluster.zk.get(path: "/consumers/#{name}/owners/#{partition.topic.name}/#{partition.id}", watcher: cb)
55
48
 
56
49
  case result.fetch(:rc)
57
50
  when Zookeeper::Constants::ZNONODE # Nobody is claiming this partition yet
@@ -64,7 +57,7 @@ module Kazoo
64
57
  end
65
58
 
66
59
  def retrieve_offset(partition)
67
- result = cluster.zk.get(path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{partition.topic.name}/#{partition.id}"))
60
+ result = cluster.zk.get(path: "/consumers/#{name}/offsets/#{partition.topic.name}/#{partition.id}")
68
61
  case result.fetch(:rc)
69
62
  when Zookeeper::Constants::ZOK;
70
63
  result.fetch(:data).to_i
@@ -76,23 +69,16 @@ module Kazoo
76
69
  end
77
70
 
78
71
  def commit_offset(partition, offset)
79
- result = cluster.zk.set(
80
- path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{partition.topic.name}/#{partition.id}"),
81
- data: (offset + 1).to_s
82
- )
83
-
72
+ result = cluster.zk.set(path: "/consumers/#{name}/offsets/#{partition.topic.name}/#{partition.id}", data: (offset + 1).to_s)
84
73
  if result.fetch(:rc) == Zookeeper::Constants::ZNONODE
85
- result = cluster.zk.create(path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{partition.topic.name}"))
74
+ result = cluster.zk.create(path: "/consumers/#{name}/offsets/#{partition.topic.name}")
86
75
  case result.fetch(:rc)
87
76
  when Zookeeper::Constants::ZOK, Zookeeper::Constants::ZNODEEXISTS
88
77
  else
89
78
  raise Kazoo::Error, "Failed to commit offset #{offset} for partition #{partition.topic.name}/#{partition.id}. Error code: #{result.fetch(:rc)}"
90
79
  end
91
80
 
92
- result = cluster.zk.create(
93
- path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{partition.topic.name}/#{partition.id}"),
94
- data: (offset + 1).to_s
95
- )
81
+ result = cluster.zk.create(path: "/consumers/#{name}/offsets/#{partition.topic.name}/#{partition.id}", data: (offset + 1).to_s)
96
82
  end
97
83
 
98
84
  if result.fetch(:rc) != Zookeeper::Constants::ZOK
@@ -101,19 +87,19 @@ module Kazoo
101
87
  end
102
88
 
103
89
  def reset_offsets
104
- result = cluster.zk.get_children(path: cluster.node_with_chroot("/consumers/#{name}/offsets"))
90
+ result = cluster.zk.get_children(path: "/consumers/#{name}/offsets")
105
91
  raise Kazoo::Error unless result.fetch(:rc) == Zookeeper::Constants::ZOK
106
92
 
107
93
  result.fetch(:children).each do |topic|
108
- result = cluster.zk.get_children(path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{topic}"))
94
+ result = cluster.zk.get_children(path: "/consumers/#{name}/offsets/#{topic}")
109
95
  raise Kazoo::Error unless result.fetch(:rc) == Zookeeper::Constants::ZOK
110
96
 
111
97
  result.fetch(:children).each do |partition|
112
- cluster.zk.delete(path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{topic}/#{partition}"))
98
+ cluster.zk.delete(path: "/consumers/#{name}/offsets/#{topic}/#{partition}")
113
99
  raise Kazoo::Error unless result.fetch(:rc) == Zookeeper::Constants::ZOK
114
100
  end
115
101
 
116
- cluster.zk.delete(path: cluster.node_with_chroot("/consumers/#{name}/offsets/#{topic}"))
102
+ cluster.zk.delete(path: "/consumers/#{name}/offsets/#{topic}")
117
103
  raise Kazoo::Error unless result.fetch(:rc) == Zookeeper::Constants::ZOK
118
104
  end
119
105
  end
@@ -146,13 +132,13 @@ module Kazoo
146
132
  end
147
133
 
148
134
  def registered?
149
- stat = cluster.zk.stat(path: cluster.node_with_chroot("/consumers/#{group.name}/ids/#{id}"))
135
+ stat = cluster.zk.stat(path: "/consumers/#{group.name}/ids/#{id}")
150
136
  stat.fetch(:stat).exists?
151
137
  end
152
138
 
153
139
  def register(subscription)
154
140
  result = cluster.zk.create(
155
- path: cluster.node_with_chroot("/consumers/#{group.name}/ids/#{id}"),
141
+ path: "/consumers/#{group.name}/ids/#{id}",
156
142
  ephemeral: true,
157
143
  data: JSON.generate({
158
144
  version: 1,
@@ -167,9 +153,9 @@ module Kazoo
167
153
  end
168
154
 
169
155
  subscription.each do |topic|
170
- stat = cluster.zk.stat(path: cluster.node_with_chroot("/consumers/#{group.name}/owners/#{topic.name}"))
156
+ stat = cluster.zk.stat(path: "/consumers/#{group.name}/owners/#{topic.name}")
171
157
  unless stat.fetch(:stat).exists?
172
- result = cluster.zk.create(path: cluster.node_with_chroot("/consumers/#{group.name}/owners/#{topic.name}"))
158
+ result = cluster.zk.create(path: "/consumers/#{group.name}/owners/#{topic.name}")
173
159
  if result.fetch(:rc) != Zookeeper::Constants::ZOK
174
160
  raise Kazoo::ConsumerInstanceRegistrationFailed, "Failed to register subscription of #{topic.name} for consumer group #{group.name}! Error code: #{result.fetch(:rc)}"
175
161
  end
@@ -178,12 +164,12 @@ module Kazoo
178
164
  end
179
165
 
180
166
  def deregister
181
- cluster.zk.delete(path: cluster.node_with_chroot("/consumers/#{group.name}/ids/#{id}"))
167
+ cluster.zk.delete(path: "/consumers/#{group.name}/ids/#{id}")
182
168
  end
183
169
 
184
170
  def claim_partition(partition)
185
171
  result = cluster.zk.create(
186
- path: cluster.node_with_chroot("/consumers/#{group.name}/owners/#{partition.topic.name}/#{partition.id}"),
172
+ path: "/consumers/#{group.name}/owners/#{partition.topic.name}/#{partition.id}",
187
173
  ephemeral: true,
188
174
  data: id,
189
175
  )
@@ -199,7 +185,7 @@ module Kazoo
199
185
  end
200
186
 
201
187
  def release_partition(partition)
202
- result = cluster.zk.delete(path: cluster.node_with_chroot("/consumers/#{group.name}/owners/#{partition.topic.name}/#{partition.id}"))
188
+ result = cluster.zk.delete(path: "/consumers/#{group.name}/owners/#{partition.topic.name}/#{partition.id}")
203
189
  if result.fetch(:rc) != Zookeeper::Constants::ZOK
204
190
  raise Kazoo::Error, "Failed to release partition #{partition.topic.name}/#{partition.id}. Error code: #{result.fetch(:rc)}"
205
191
  end
@@ -50,7 +50,7 @@ module Kazoo
50
50
  protected
51
51
 
52
52
  def refresh_state
53
- state_json = cluster.zk.get(path: cluster.node_with_chroot("/brokers/topics/#{topic.name}/partitions/#{id}/state"))
53
+ state_json = cluster.zk.get(path: "/brokers/topics/#{topic.name}/partitions/#{id}/state")
54
54
  set_state(JSON.parse(state_json.fetch(:data)))
55
55
  end
56
56
 
@@ -1,3 +1,3 @@
1
1
  module Kazoo
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kafka-consumer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen