phobos 1.6.1 → 1.7.0
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/CHANGELOG.md +11 -0
- data/README.md +18 -2
- data/lib/phobos/actions/process_batch.rb +6 -10
- data/lib/phobos/actions/process_message.rb +5 -13
- data/lib/phobos/cli.rb +15 -15
- data/lib/phobos/instrumentation.rb +2 -6
- data/lib/phobos/listener.rb +2 -2
- data/lib/phobos/version.rb +1 -1
- data/phobos.gemspec +2 -2
- metadata +4 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa6ceb9067bc80835a1460e43cbe613f7fdaaa23
|
4
|
+
data.tar.gz: 43281f6ada2fe5b824da9cc236d56523c58cee02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad5569add3dd9748cb746943816285d3518052dbc148b2102975b60744782081afc81c5d520f7ca80e090505b4c6b592b49959aa8d22820367f799739d4c2e7d
|
7
|
+
data.tar.gz: 2e110cdba90db10a6c0cf4a51bee1f8bdf31ea1090f303d44d817654d6c8dd14837eba52a6a83419e35c31a385a3dc01a083df16142128805adc9e5d5d65b29c
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,17 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
7
7
|
## UNRELEASED
|
8
8
|
|
9
|
+
## [1.7.0] - 2017-12-05
|
10
|
+
### Fixed
|
11
|
+
- Test are failing with ruby-kafka 0.5.0 #48
|
12
|
+
- Allow Phobos to run in apps using ActiveSupport 3.x #57
|
13
|
+
### Added
|
14
|
+
- Property (handler) added to listener instrumentation #60
|
15
|
+
### Removed
|
16
|
+
- Property (time_elapsed) removed - use duration instead #24
|
17
|
+
### Changed
|
18
|
+
- Max bytes per partition is now 1 MB by default #56
|
19
|
+
|
9
20
|
## [1.6.1] - 2017-11-16
|
10
21
|
### Fixed
|
11
22
|
- `Phobos::Test::Helper` is broken #53
|
data/README.md
CHANGED
@@ -378,32 +378,35 @@ end
|
|
378
378
|
* listener_id
|
379
379
|
* group_id
|
380
380
|
* topic
|
381
|
+
* handler
|
381
382
|
* `listener.start` is sent when listener starts. It includes the following payload:
|
382
383
|
* listener_id
|
383
384
|
* group_id
|
384
385
|
* topic
|
386
|
+
* handler
|
385
387
|
* `listener.process_batch` is sent after process a batch. It includes the following payload:
|
386
388
|
* listener_id
|
387
389
|
* group_id
|
388
390
|
* topic
|
391
|
+
* handler
|
389
392
|
* batch_size
|
390
393
|
* partition
|
391
394
|
* offset_lag
|
392
395
|
* highwater_mark_offset
|
393
|
-
* time_elapsed
|
394
396
|
* `listener.process_message` is sent after process a message. It includes the following payload:
|
395
397
|
* listener_id
|
396
398
|
* group_id
|
397
399
|
* topic
|
400
|
+
* handler
|
398
401
|
* key
|
399
402
|
* partition
|
400
403
|
* offset
|
401
404
|
* retry_count
|
402
|
-
* time_elapsed
|
403
405
|
* `listener.retry_handler_error` is sent after waited for `handler#consume` retry. It includes the following payload:
|
404
406
|
* listener_id
|
405
407
|
* group_id
|
406
408
|
* topic
|
409
|
+
* handler
|
407
410
|
* key
|
408
411
|
* partition
|
409
412
|
* offset
|
@@ -416,18 +419,22 @@ end
|
|
416
419
|
* listener_id
|
417
420
|
* group_id
|
418
421
|
* topic
|
422
|
+
* handler
|
419
423
|
* `listener.stopping` is sent when the listener receives signal to stop
|
420
424
|
* listener_id
|
421
425
|
* group_id
|
422
426
|
* topic
|
427
|
+
* handler
|
423
428
|
* `listener.stop_handler` is sent after stopping the handler
|
424
429
|
* listener_id
|
425
430
|
* group_id
|
426
431
|
* topic
|
432
|
+
* handler
|
427
433
|
* `listener.stop` is send after stopping the listener
|
428
434
|
* listener_id
|
429
435
|
* group_id
|
430
436
|
* topic
|
437
|
+
* handler
|
431
438
|
|
432
439
|
## <a name="plugins"></a> Plugins
|
433
440
|
|
@@ -438,6 +445,15 @@ List of gems that enhance Phobos:
|
|
438
445
|
* Ensures that your handler will consume messages only once
|
439
446
|
* Allows your system to quickly reprocess events in case of failures
|
440
447
|
|
448
|
+
* [Phobos Checkpoint UI](https://github.com/klarna/phobos_checkpoint_ui) gives your Phobos DB Checkpoint powered app a web gui with the features below. Maintaining a Kafka consumer app has never been smoother:
|
449
|
+
* Search events and inspect payload
|
450
|
+
* See failures and retry / delete them
|
451
|
+
|
452
|
+
* [Phobos Prometheus](https://github.com/phobos/phobos_prometheus) adds prometheus metrics to your phobos consumer.
|
453
|
+
* Measures total messages and batches processed
|
454
|
+
* Measures total duration needed to process each message (and batch)
|
455
|
+
* Adds `/metrics` endpoit to scrape data
|
456
|
+
|
441
457
|
## <a name="development"></a> Development
|
442
458
|
|
443
459
|
After checking out the repo:
|
@@ -18,17 +18,13 @@ module Phobos
|
|
18
18
|
|
19
19
|
def execute
|
20
20
|
instrument('listener.process_batch', @metadata) do |metadata|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
).execute
|
28
|
-
end
|
21
|
+
@batch.messages.each do |message|
|
22
|
+
Phobos::Actions::ProcessMessage.new(
|
23
|
+
listener: @listener,
|
24
|
+
message: message,
|
25
|
+
listener_metadata: @listener_metadata
|
26
|
+
).execute
|
29
27
|
end
|
30
|
-
|
31
|
-
metadata.merge!(time_elapsed: time_elapsed)
|
32
28
|
end
|
33
29
|
end
|
34
30
|
end
|
@@ -8,7 +8,6 @@ module Phobos
|
|
8
8
|
def initialize(listener:, message:, listener_metadata:)
|
9
9
|
@listener = listener
|
10
10
|
@message = message
|
11
|
-
@listener_metadata = listener_metadata
|
12
11
|
@metadata = listener_metadata.merge(
|
13
12
|
key: message.key,
|
14
13
|
partition: message.partition,
|
@@ -56,20 +55,13 @@ module Phobos
|
|
56
55
|
end
|
57
56
|
|
58
57
|
def process_message(payload)
|
59
|
-
instrument('listener.process_message', @metadata) do
|
60
|
-
|
61
|
-
|
62
|
-
handler = @listener.handler_class.new
|
63
|
-
preprocessed_payload = handler.before_consume(payload)
|
58
|
+
instrument('listener.process_message', @metadata) do
|
59
|
+
handler = @listener.handler_class.new
|
60
|
+
preprocessed_payload = handler.before_consume(payload)
|
64
61
|
|
65
|
-
|
66
|
-
|
67
|
-
end
|
62
|
+
@listener.handler_class.around_consume(preprocessed_payload, @metadata) do
|
63
|
+
handler.consume(preprocessed_payload, @metadata)
|
68
64
|
end
|
69
|
-
|
70
|
-
metadata.merge!(time_elapsed: time_elapsed)
|
71
|
-
|
72
|
-
consume_result
|
73
65
|
end
|
74
66
|
end
|
75
67
|
end
|
data/lib/phobos/cli.rb
CHANGED
@@ -41,21 +41,21 @@ module Phobos
|
|
41
41
|
end
|
42
42
|
|
43
43
|
desc 'start', 'Starts Phobos'
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
44
|
+
method_option :config,
|
45
|
+
aliases: ['-c'],
|
46
|
+
default: 'config/phobos.yml',
|
47
|
+
banner: 'Configuration file'
|
48
|
+
method_option :boot,
|
49
|
+
aliases: ['-b'],
|
50
|
+
banner: 'File path to load application specific code',
|
51
|
+
default: 'phobos_boot.rb'
|
52
|
+
method_option :listeners,
|
53
|
+
aliases: ['-l'],
|
54
|
+
banner: 'Separate listeners config file (optional)'
|
55
|
+
method_option :skip_config,
|
56
|
+
default: false,
|
57
|
+
type: :boolean,
|
58
|
+
banner: 'Skip config file'
|
59
59
|
def start
|
60
60
|
Phobos::CLI::Start.new(options).execute
|
61
61
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support/notifications'
|
2
|
+
|
1
3
|
module Phobos
|
2
4
|
module Instrumentation
|
3
5
|
NAMESPACE = 'phobos'
|
@@ -17,11 +19,5 @@ module Phobos
|
|
17
19
|
yield(extra) if block_given?
|
18
20
|
end
|
19
21
|
end
|
20
|
-
|
21
|
-
def measure
|
22
|
-
start = Time.now.utc
|
23
|
-
yield if block_given?
|
24
|
-
(Time.now.utc - start).round(3)
|
25
|
-
end
|
26
22
|
end
|
27
23
|
end
|
data/lib/phobos/listener.rb
CHANGED
@@ -3,7 +3,7 @@ module Phobos
|
|
3
3
|
include Phobos::Instrumentation
|
4
4
|
|
5
5
|
KAFKA_CONSUMER_OPTS = %i(session_timeout offset_commit_interval offset_commit_threshold heartbeat_interval).freeze
|
6
|
-
DEFAULT_MAX_BYTES_PER_PARTITION =
|
6
|
+
DEFAULT_MAX_BYTES_PER_PARTITION = 1048576 # 1 MB
|
7
7
|
DELIVERY_OPTS = %w[batch message].freeze
|
8
8
|
|
9
9
|
attr_reader :group_id, :topic, :id
|
@@ -124,7 +124,7 @@ module Phobos
|
|
124
124
|
private
|
125
125
|
|
126
126
|
def listener_metadata
|
127
|
-
{ listener_id: id, group_id: group_id, topic: topic }
|
127
|
+
{ listener_id: id, group_id: group_id, topic: topic, handler: handler_class.to_s }
|
128
128
|
end
|
129
129
|
|
130
130
|
def create_kafka_consumer
|
data/lib/phobos/version.rb
CHANGED
data/phobos.gemspec
CHANGED
@@ -51,10 +51,10 @@ Gem::Specification.new do |spec|
|
|
51
51
|
spec.add_development_dependency 'simplecov'
|
52
52
|
spec.add_development_dependency 'timecop'
|
53
53
|
|
54
|
-
spec.add_dependency 'ruby-kafka', '>= 0.3.14'
|
54
|
+
spec.add_dependency 'ruby-kafka', '>= 0.3.14'
|
55
55
|
spec.add_dependency 'concurrent-ruby', '>= 1.0.2'
|
56
56
|
spec.add_dependency 'concurrent-ruby-ext', '>= 1.0.2'
|
57
|
-
spec.add_dependency 'activesupport', '>=
|
57
|
+
spec.add_dependency 'activesupport', '>= 3.0.0'
|
58
58
|
spec.add_dependency 'logging'
|
59
59
|
spec.add_dependency 'exponential-backoff'
|
60
60
|
spec.add_dependency 'thor'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phobos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Túlio Ornelas
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2017-
|
17
|
+
date: 2017-12-05 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: bundler
|
@@ -107,9 +107,6 @@ dependencies:
|
|
107
107
|
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: 0.3.14
|
110
|
-
- - "<"
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: 0.5.0
|
113
110
|
type: :runtime
|
114
111
|
prerelease: false
|
115
112
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -117,9 +114,6 @@ dependencies:
|
|
117
114
|
- - ">="
|
118
115
|
- !ruby/object:Gem::Version
|
119
116
|
version: 0.3.14
|
120
|
-
- - "<"
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 0.5.0
|
123
117
|
- !ruby/object:Gem::Dependency
|
124
118
|
name: concurrent-ruby
|
125
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,14 +148,14 @@ dependencies:
|
|
154
148
|
requirements:
|
155
149
|
- - ">="
|
156
150
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
151
|
+
version: 3.0.0
|
158
152
|
type: :runtime
|
159
153
|
prerelease: false
|
160
154
|
version_requirements: !ruby/object:Gem::Requirement
|
161
155
|
requirements:
|
162
156
|
- - ">="
|
163
157
|
- !ruby/object:Gem::Version
|
164
|
-
version:
|
158
|
+
version: 3.0.0
|
165
159
|
- !ruby/object:Gem::Dependency
|
166
160
|
name: logging
|
167
161
|
requirement: !ruby/object:Gem::Requirement
|