poseidon_cluster 0.0.3 → 0.0.5
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 +4 -4
- data/.travis.yml +1 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +2 -2
- data/README.md +1 -1
- data/Rakefile +6 -0
- data/lib/poseidon/consumer_group.rb +32 -17
- data/poseidon_cluster.gemspec +2 -1
- data/spec/integration/poseidon/consumer_group_spec.rb +3 -2
- data/spec/lib/poseidon/consumer_group_spec.rb +1 -0
- data/spec/spec_helper.rb +0 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58d3c657309fe7381c8776baa87f54b41f04281f
|
4
|
+
data.tar.gz: 009a15759814e1c92bdec7e903d9a8fb16a4ce4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fc88b0a4b8f27cb3314db151956242a1c1e3caaa78fa89a17c15907e28a0cfc6ac0bfeadd26829245a01e331ee1112bf6abf2201357418f5bccef4b0ddb933c
|
7
|
+
data.tar.gz: 79d9a39b2ab8a424ed3e0d44419e3c021983afb617637db237ce2ee0134ff18dcaca7494ce65bd535b400cfb1ef816cacf20d0a8c7ebe1c32bd1b05356a699c9
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,7 +7,7 @@ GIT
|
|
7
7
|
PATH
|
8
8
|
remote: .
|
9
9
|
specs:
|
10
|
-
poseidon_cluster (0.0.
|
10
|
+
poseidon_cluster (0.0.5)
|
11
11
|
poseidon
|
12
12
|
zk
|
13
13
|
|
@@ -25,7 +25,7 @@ GEM
|
|
25
25
|
little-plugger (1.1.3)
|
26
26
|
logging (1.7.2)
|
27
27
|
little-plugger (>= 1.1.3)
|
28
|
-
mime-types (2.
|
28
|
+
mime-types (2.1)
|
29
29
|
multi_json (1.8.4)
|
30
30
|
rake (10.1.1)
|
31
31
|
rest-client (1.6.7)
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Poseidon Cluster [](https://travis-ci.org/bsm/poseidon_cluster)
|
1
|
+
# Poseidon Cluster [](https://travis-ci.org/bsm/poseidon_cluster) [](https://coveralls.io/r/bsm/poseidon_cluster)
|
2
2
|
|
3
3
|
Poseidon Cluster is a cluster extension the excellent [Poseidon](http://github.com/bpot/poseidon) Ruby client for Kafka 0.8+. It implements the distribution concept of self-rebalancing *Consumer Groups* and supports the consumption of a single topic from multiple instances.
|
4
4
|
|
data/Rakefile
CHANGED
@@ -69,26 +69,20 @@ class Poseidon::ConsumerGroup
|
|
69
69
|
# @option options [Integer] :min_bytes Smallest amount of data the server should send us. Default: 0 (Send us data as soon as it is ready)
|
70
70
|
# @option options [Integer] :claim_timeout Maximum number of seconds to wait for a partition claim. Default: 10
|
71
71
|
# @option options [Integer] :loop_delay Number of seconds to delay the next fetch (in #fetch_loop) if nothing was returned. Default: 1
|
72
|
+
# @option options [Boolean] :register Automatically register instance and start consuming. Default: true
|
72
73
|
#
|
73
74
|
# @api public
|
74
75
|
def initialize(name, brokers, zookeepers, topic, options = {})
|
75
|
-
@name
|
76
|
-
@topic
|
77
|
-
@zk
|
78
|
-
@options
|
79
|
-
@consumers
|
80
|
-
@pool
|
81
|
-
@mutex
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
zk.mkdir_p(path)
|
86
|
-
end
|
87
|
-
zk.create(consumer_path, "{}", ephemeral: true)
|
88
|
-
zk.register(registries[:consumer]) {|_| rebalance! }
|
89
|
-
|
90
|
-
# Rebalance
|
91
|
-
rebalance!
|
76
|
+
@name = name
|
77
|
+
@topic = topic
|
78
|
+
@zk = ::ZK.new(zookeepers.join(","))
|
79
|
+
@options = options
|
80
|
+
@consumers = []
|
81
|
+
@pool = ::Poseidon::BrokerPool.new(id, brokers)
|
82
|
+
@mutex = Mutex.new
|
83
|
+
@registered = false
|
84
|
+
|
85
|
+
register! unless options[:register] == false
|
92
86
|
end
|
93
87
|
|
94
88
|
# @return [String] a globally unique identifier
|
@@ -115,6 +109,27 @@ class Poseidon::ConsumerGroup
|
|
115
109
|
@topic_metadata ||= metadata.metadata_for_topics([topic])[topic]
|
116
110
|
end
|
117
111
|
|
112
|
+
# @return [Boolean] true if registered
|
113
|
+
def registered?
|
114
|
+
@registered
|
115
|
+
end
|
116
|
+
|
117
|
+
# @return [Boolean] true if registration was successful, false if already registered
|
118
|
+
def register!
|
119
|
+
return false if registered?
|
120
|
+
|
121
|
+
# Register instance
|
122
|
+
registries.each do |_, path|
|
123
|
+
zk.mkdir_p(path)
|
124
|
+
end
|
125
|
+
zk.create(consumer_path, "{}", ephemeral: true)
|
126
|
+
zk.register(registries[:consumer]) {|_| rebalance! }
|
127
|
+
|
128
|
+
# Rebalance
|
129
|
+
rebalance!
|
130
|
+
@registered = true
|
131
|
+
end
|
132
|
+
|
118
133
|
# Reloads metadata/broker/partition information
|
119
134
|
def reload
|
120
135
|
@metadata = @topic_metadata = nil
|
data/poseidon_cluster.gemspec
CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = File.basename(__FILE__, '.gemspec')
|
6
6
|
s.summary = "Poseidon cluster extensions"
|
7
7
|
s.description = "Cluster extensions for Poseidon, a producer and consumer implementation for Kafka >= 0.8"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.authors = ["Black Square Media"]
|
11
11
|
s.email = "info@blacksquaremedia.com"
|
@@ -22,5 +22,6 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "bundler"
|
23
23
|
s.add_development_dependency "rspec"
|
24
24
|
s.add_development_dependency "yard"
|
25
|
+
s.add_development_dependency "coveralls"
|
25
26
|
|
26
27
|
end
|
@@ -139,11 +139,12 @@ describe Poseidon::ConsumerGroup, integration: true do
|
|
139
139
|
50.times { group.fetch {|_, m| write.write "4:#{m.size}\n" }}
|
140
140
|
end
|
141
141
|
end
|
142
|
+
|
142
143
|
pid5 = fork do
|
143
144
|
group = new_group(32*1024, "slow-topic")
|
144
|
-
|
145
|
+
10.times do
|
145
146
|
50.times { group.fetch {|_, m| write.write "5:#{m.size}\n" }}
|
146
|
-
sleep(
|
147
|
+
sleep(3)
|
147
148
|
end
|
148
149
|
end
|
149
150
|
Process.wait(pid1)
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: poseidon_cluster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Black Square Media
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: poseidon
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
description: Cluster extensions for Poseidon, a producer and consumer implementation
|
98
112
|
for Kafka >= 0.8
|
99
113
|
email: info@blacksquaremedia.com
|
@@ -136,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
150
|
version: 1.8.0
|
137
151
|
requirements: []
|
138
152
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.2.
|
153
|
+
rubygems_version: 2.2.1
|
140
154
|
signing_key:
|
141
155
|
specification_version: 4
|
142
156
|
summary: Poseidon cluster extensions
|