waterdrop 1.4.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 +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.coditsu/ci.yml +3 -0
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +68 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +35 -0
- data/CHANGELOG.md +158 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +102 -0
- data/MIT-LICENCE +18 -0
- data/README.md +127 -0
- data/certs/mensfeld.pem +25 -0
- data/config/errors.yml +19 -0
- data/lib/water_drop.rb +50 -0
- data/lib/water_drop/async_producer.rb +26 -0
- data/lib/water_drop/base_producer.rb +57 -0
- data/lib/water_drop/config.rb +162 -0
- data/lib/water_drop/config_applier.rb +52 -0
- data/lib/water_drop/contracts.rb +9 -0
- data/lib/water_drop/contracts/config.rb +139 -0
- data/lib/water_drop/contracts/message_options.rb +19 -0
- data/lib/water_drop/errors.rb +18 -0
- data/lib/water_drop/instrumentation/monitor.rb +46 -0
- data/lib/water_drop/instrumentation/stdout_listener.rb +45 -0
- data/lib/water_drop/sync_producer.rb +24 -0
- data/lib/water_drop/version.rb +7 -0
- data/lib/waterdrop.rb +4 -0
- data/log/.gitkeep +0 -0
- data/waterdrop.gemspec +36 -0
- metadata +189 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f2ef3d3916d6b0e59c191c8a81ad88cc33424a4ee4ff4c7c12e65e5ad3c79ba3
|
4
|
+
data.tar.gz: 1e02c7ae97e7c85e1d4aa12fe5e7c2b5611add6d41b15949fc17830382e4d99d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c58aaaec32bbe3c1a930a0366447e5f69e3551619ad48ea243787b1fa487fdb3f17b5e17fd409ef956b0793dba3550a914ac15015e93cd4d81fa992f59040f7e
|
7
|
+
data.tar.gz: 00f6e291c053a46c650936a7d0e03a1c20f7631d5b597df30aa1b0f2ae614873b16c8bdf58a7081f3438e894d3f20c006e736826b2adf76e12c2be49e8f42b48
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/.coditsu/ci.yml
ADDED
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
open_collective: karafka
|
data/.gitignore
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
# bundler state
|
2
|
+
/.bundle
|
3
|
+
/vendor/bundle/
|
4
|
+
/vendor/ruby/
|
5
|
+
/ruby/
|
6
|
+
app.god
|
7
|
+
|
8
|
+
# minimal Rails specific artifacts
|
9
|
+
db/*.sqlite3
|
10
|
+
/log/*.log
|
11
|
+
/tmp/*
|
12
|
+
*.gem
|
13
|
+
*.~
|
14
|
+
/.coditsu/local.yml
|
15
|
+
|
16
|
+
# various artifacts
|
17
|
+
**.war
|
18
|
+
*.rbc
|
19
|
+
*.sassc
|
20
|
+
.redcar/
|
21
|
+
.capistrano/
|
22
|
+
.sass-cache
|
23
|
+
/config/god/sidekiq.rb
|
24
|
+
/config/puma.rb
|
25
|
+
/coverage.data
|
26
|
+
/coverage/
|
27
|
+
/doc/api/
|
28
|
+
/doc/app/
|
29
|
+
/doc/yard
|
30
|
+
/doc/features.html
|
31
|
+
/doc/specs.html
|
32
|
+
/spec/tmp/*
|
33
|
+
/cache
|
34
|
+
/capybara*
|
35
|
+
/capybara-*.html
|
36
|
+
/gems
|
37
|
+
/specifications
|
38
|
+
rerun.txt
|
39
|
+
pickle-email-*.html
|
40
|
+
|
41
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
42
|
+
# or operating system, you probably want to add a global ignore instead:
|
43
|
+
# git config --global core.excludesfile ~/.gitignore_global
|
44
|
+
#
|
45
|
+
# Here are some files you may want to ignore globally:
|
46
|
+
|
47
|
+
# scm revert files
|
48
|
+
**.orig
|
49
|
+
|
50
|
+
# Mac finder artifacts
|
51
|
+
.DS_Store
|
52
|
+
|
53
|
+
# Netbeans project directory
|
54
|
+
/nbproject
|
55
|
+
|
56
|
+
# RubyMine project files
|
57
|
+
.idea
|
58
|
+
|
59
|
+
# Textmate project files
|
60
|
+
/*.tmproj
|
61
|
+
|
62
|
+
# vim artifacts
|
63
|
+
**.swp
|
64
|
+
|
65
|
+
# documentation
|
66
|
+
.yardoc
|
67
|
+
|
68
|
+
.byebug_history
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
waterdrop
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.1
|
data/.travis.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
services:
|
2
|
+
- docker
|
3
|
+
|
4
|
+
dist: trusty
|
5
|
+
cache: bundler
|
6
|
+
|
7
|
+
git:
|
8
|
+
depth: false
|
9
|
+
|
10
|
+
test: &test
|
11
|
+
stage: Test
|
12
|
+
language: ruby
|
13
|
+
before_install:
|
14
|
+
- yes | gem update --system
|
15
|
+
script: bundle exec rspec
|
16
|
+
|
17
|
+
jobs:
|
18
|
+
include:
|
19
|
+
- <<: *test
|
20
|
+
rvm: 2.7.1
|
21
|
+
- <<: *test
|
22
|
+
rvm: 2.6.6
|
23
|
+
- <<: *test
|
24
|
+
rvm: 2.5.8
|
25
|
+
|
26
|
+
- stage: coditsu
|
27
|
+
language: ruby
|
28
|
+
rvm: 2.7.1
|
29
|
+
before_install:
|
30
|
+
- yes | gem update --system
|
31
|
+
script: \curl -sSL https://api.coditsu.io/run/ci | bash
|
32
|
+
|
33
|
+
stages:
|
34
|
+
- test
|
35
|
+
- coditsu
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
# WaterDrop changelog
|
2
|
+
|
3
|
+
## 1.4.0 (2020-08-25)
|
4
|
+
- Release to match Karafka 1.4 versioning.
|
5
|
+
|
6
|
+
## 1.3.4 (2020-02-17)
|
7
|
+
- Support for new `dry-configurable`
|
8
|
+
|
9
|
+
## 1.3.3 (2019-01-06)
|
10
|
+
- #119 - Support exactly once delivery and transactional messaging (kylekthompson)
|
11
|
+
- #119 - Support delivery_boy 1.0 (kylekthompson)
|
12
|
+
|
13
|
+
## 1.3.2 (2019-26-12)
|
14
|
+
- Ruby 2.7.0 support
|
15
|
+
- Fix missing `delegate` dependency on `ruby-kafka`
|
16
|
+
|
17
|
+
## 1.3.1 (2019-10-21)
|
18
|
+
- Ruby 2.6.5 support
|
19
|
+
- Expose setting to optionally verify hostname on ssl certs #109 (tabdollahi)
|
20
|
+
|
21
|
+
## 1.3.0 (2019-09-09)
|
22
|
+
- Drop Ruby 2.4 support
|
23
|
+
|
24
|
+
## 1.3.0.rc1 (2019-07-31)
|
25
|
+
- Drop Ruby 2.3 support
|
26
|
+
- Drop support for Kafka 0.10 in favor of native support for Kafka 0.11.
|
27
|
+
- Ruby 2.6.3 support
|
28
|
+
- Support message headers
|
29
|
+
- `sasl_over_ssl` support
|
30
|
+
- Unlock Ruby Kafka + provide support for 0.7 only
|
31
|
+
- #60 - Rename listener to StdoutListener
|
32
|
+
- Drop support for Kafka 0.10 in favor of native support for Kafka 0.11.
|
33
|
+
- Support ruby-kafka 0.7
|
34
|
+
- Support message headers
|
35
|
+
- `sasl_over_ssl` support
|
36
|
+
- `ssl_client_cert_key_password` support
|
37
|
+
- #87 - Make stdout listener as instance
|
38
|
+
- Use Zeitwerk for gem code loading
|
39
|
+
- #93 - zstd compression support
|
40
|
+
- #99 - schemas are renamed to contracts
|
41
|
+
- Bump delivery_boy (0.2.7 => 0.2.8)
|
42
|
+
|
43
|
+
## 1.2.5
|
44
|
+
- Bump dependencies to match Karafka
|
45
|
+
- drop jruby support
|
46
|
+
- drop ruby 2.2 support
|
47
|
+
|
48
|
+
## 1.2.4
|
49
|
+
- Due to multiple requests, unlock of 0.7 with an additional post-install message
|
50
|
+
|
51
|
+
## 1.2.3
|
52
|
+
- Lock ruby-kafka to 0.6 (0.7 support targeted for WaterDrop 1.3)
|
53
|
+
|
54
|
+
## 1.2.2
|
55
|
+
- #55 - Codec settings unification and config applier
|
56
|
+
|
57
|
+
## 1.2.1
|
58
|
+
- #54 - compression_codec api sync with king-konf requirements
|
59
|
+
|
60
|
+
## 1.2.0
|
61
|
+
- #45 - Allow specifying a create time for messages
|
62
|
+
- #47 - Support SCRAM once released
|
63
|
+
- #49 - Add lz4 support once merged and released
|
64
|
+
- #50 - Potential message loss in async mode
|
65
|
+
- Ruby 2.5.0 support
|
66
|
+
- Gem bump to match Karafka framework versioning
|
67
|
+
- #48 - ssl_ca_certs_from_system
|
68
|
+
- #52 - Use instrumentation compatible with Karafka 1.2
|
69
|
+
|
70
|
+
## 1.0.1
|
71
|
+
- Added high level retry on connection problems
|
72
|
+
|
73
|
+
## 1.0.0
|
74
|
+
|
75
|
+
- #37 - ack level for producer
|
76
|
+
- Gem bump
|
77
|
+
- Ruby 2.4.2 support
|
78
|
+
- Raw ruby-kafka driver is now replaced with delivery_boy
|
79
|
+
- Sync and async producers
|
80
|
+
- Complete update of the API
|
81
|
+
- Much better validations for config details
|
82
|
+
- Complete API remodel - please read the new README
|
83
|
+
- Renamed send_messages to deliver
|
84
|
+
|
85
|
+
## 0.4
|
86
|
+
- Bump to match Karafka
|
87
|
+
- Renamed ```hosts``` to ```seed_brokers```
|
88
|
+
- Removed the ```ssl``` scoping for ```kafka``` config namespace to better match Karafka conventions
|
89
|
+
- Added ```client_id``` option on a root config level
|
90
|
+
- Added ```logger``` option on a root config level
|
91
|
+
- Auto Propagation of config down to ruby-kafka
|
92
|
+
|
93
|
+
## 0.3.2
|
94
|
+
- Removed support for Ruby 2.1.*
|
95
|
+
- ~~Ruby 2.3.3 as default~~
|
96
|
+
- Ruby 2.4.0 as default
|
97
|
+
- Gem dump x2
|
98
|
+
- Dry configurable config (#20)
|
99
|
+
- added .rspec for default spec helper require
|
100
|
+
- Added SSL capabilities
|
101
|
+
- Coditsu instead of PG dev tools for quality control
|
102
|
+
|
103
|
+
## 0.3.1
|
104
|
+
- Dev tools update
|
105
|
+
- Gem update
|
106
|
+
- Specs updates
|
107
|
+
- File naming convention fix from waterdrop to water_drop + compatibility file
|
108
|
+
- Additional params (partition, etc) that can be passed into producer
|
109
|
+
|
110
|
+
## 0.3.0
|
111
|
+
- Driver change from Poseidon (not maintained) to Ruby-Kafka
|
112
|
+
|
113
|
+
## 0.2.0
|
114
|
+
- Version dump - this WaterDrop version no longer relies on Aspector to work
|
115
|
+
- #17 - Logger for Aspector - WaterDrop no longer depends on Aspector
|
116
|
+
- #8 - add send date as a default value added to a message - wont-fix. Should be implemented on a message level since WaterDrop just transports messages without adding additional stuff.
|
117
|
+
- #11 - same as above
|
118
|
+
|
119
|
+
## 0.1.13
|
120
|
+
- Resolved bug #15. When you use waterdrop in aspect way, message will be automatically parse to JSON.
|
121
|
+
|
122
|
+
## 0.1.12
|
123
|
+
- Removed default to_json casting because of binary/other data types incompatibility. This is an incompatibility. If you use WaterDrop, please add a proper casting method to places where you use it.
|
124
|
+
- Gem dump
|
125
|
+
|
126
|
+
## 0.1.11
|
127
|
+
- Poseidon options extractions and tweaks
|
128
|
+
|
129
|
+
## 0.1.10
|
130
|
+
- Switched raise_on_failure to ignore all StandardError failures (or not to), not just specific once
|
131
|
+
- Reloading inside connection pool connection that seems to be broken (one that failed) - this should prevent from multiple issues (but not from single one) that are related to the connection
|
132
|
+
|
133
|
+
## 0.1.9
|
134
|
+
- Required acks and set to -1 (most secure but slower)
|
135
|
+
- Added a proxy layer to to producer so we could replace Kafka with other messaging systems
|
136
|
+
- Gem dump
|
137
|
+
|
138
|
+
## 0.1.8
|
139
|
+
- proper poseidon clients names (not duplicated)
|
140
|
+
|
141
|
+
## 0.1.7
|
142
|
+
- kafka_host, kafka_hosts and kafka_ports settings consistency fix
|
143
|
+
|
144
|
+
## 0.1.6
|
145
|
+
- Added null-logger gem
|
146
|
+
|
147
|
+
## 0.1.5
|
148
|
+
- raise_on_failure flag to ignore (if false) that message was not sent
|
149
|
+
|
150
|
+
## 0.1.4
|
151
|
+
- Renamed WaterDrop::Event to WaterDrop::Message to follow Apache Kafka naming convention
|
152
|
+
|
153
|
+
## 0.1.3
|
154
|
+
- Gems cleanup
|
155
|
+
- Requirements fix
|
156
|
+
|
157
|
+
## 0.1.2
|
158
|
+
- Initial gem release
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
waterdrop (1.4.0)
|
5
|
+
delivery_boy (>= 0.2, < 2.x)
|
6
|
+
dry-configurable (~> 0.8)
|
7
|
+
dry-monitor (~> 0.3)
|
8
|
+
dry-validation (~> 1.2)
|
9
|
+
ruby-kafka (>= 0.7.8)
|
10
|
+
zeitwerk (~> 2.1)
|
11
|
+
|
12
|
+
GEM
|
13
|
+
remote: https://rubygems.org/
|
14
|
+
specs:
|
15
|
+
concurrent-ruby (1.1.7)
|
16
|
+
delivery_boy (1.0.1)
|
17
|
+
king_konf (~> 0.3)
|
18
|
+
ruby-kafka (~> 1.0)
|
19
|
+
diff-lcs (1.4.4)
|
20
|
+
digest-crc (0.6.1)
|
21
|
+
rake (~> 13.0)
|
22
|
+
docile (1.3.2)
|
23
|
+
dry-configurable (0.11.6)
|
24
|
+
concurrent-ruby (~> 1.0)
|
25
|
+
dry-core (~> 0.4, >= 0.4.7)
|
26
|
+
dry-equalizer (~> 0.2)
|
27
|
+
dry-container (0.7.2)
|
28
|
+
concurrent-ruby (~> 1.0)
|
29
|
+
dry-configurable (~> 0.1, >= 0.1.3)
|
30
|
+
dry-core (0.4.9)
|
31
|
+
concurrent-ruby (~> 1.0)
|
32
|
+
dry-equalizer (0.3.0)
|
33
|
+
dry-events (0.2.0)
|
34
|
+
concurrent-ruby (~> 1.0)
|
35
|
+
dry-core (~> 0.4)
|
36
|
+
dry-equalizer (~> 0.2)
|
37
|
+
dry-inflector (0.2.0)
|
38
|
+
dry-initializer (3.0.3)
|
39
|
+
dry-logic (1.0.7)
|
40
|
+
concurrent-ruby (~> 1.0)
|
41
|
+
dry-core (~> 0.2)
|
42
|
+
dry-equalizer (~> 0.2)
|
43
|
+
dry-monitor (0.3.2)
|
44
|
+
dry-configurable (~> 0.5)
|
45
|
+
dry-core (~> 0.4)
|
46
|
+
dry-equalizer (~> 0.2)
|
47
|
+
dry-events (~> 0.2)
|
48
|
+
dry-schema (1.5.3)
|
49
|
+
concurrent-ruby (~> 1.0)
|
50
|
+
dry-configurable (~> 0.8, >= 0.8.3)
|
51
|
+
dry-core (~> 0.4)
|
52
|
+
dry-equalizer (~> 0.2)
|
53
|
+
dry-initializer (~> 3.0)
|
54
|
+
dry-logic (~> 1.0)
|
55
|
+
dry-types (~> 1.4)
|
56
|
+
dry-types (1.4.0)
|
57
|
+
concurrent-ruby (~> 1.0)
|
58
|
+
dry-container (~> 0.3)
|
59
|
+
dry-core (~> 0.4, >= 0.4.4)
|
60
|
+
dry-equalizer (~> 0.3)
|
61
|
+
dry-inflector (~> 0.1, >= 0.1.2)
|
62
|
+
dry-logic (~> 1.0, >= 1.0.2)
|
63
|
+
dry-validation (1.5.4)
|
64
|
+
concurrent-ruby (~> 1.0)
|
65
|
+
dry-container (~> 0.7, >= 0.7.1)
|
66
|
+
dry-core (~> 0.4)
|
67
|
+
dry-equalizer (~> 0.2)
|
68
|
+
dry-initializer (~> 3.0)
|
69
|
+
dry-schema (~> 1.5)
|
70
|
+
king_konf (0.3.7)
|
71
|
+
rake (13.0.1)
|
72
|
+
rspec (3.9.0)
|
73
|
+
rspec-core (~> 3.9.0)
|
74
|
+
rspec-expectations (~> 3.9.0)
|
75
|
+
rspec-mocks (~> 3.9.0)
|
76
|
+
rspec-core (3.9.2)
|
77
|
+
rspec-support (~> 3.9.3)
|
78
|
+
rspec-expectations (3.9.2)
|
79
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
80
|
+
rspec-support (~> 3.9.0)
|
81
|
+
rspec-mocks (3.9.1)
|
82
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
83
|
+
rspec-support (~> 3.9.0)
|
84
|
+
rspec-support (3.9.3)
|
85
|
+
ruby-kafka (1.2.0)
|
86
|
+
digest-crc
|
87
|
+
simplecov (0.19.0)
|
88
|
+
docile (~> 1.1)
|
89
|
+
simplecov-html (~> 0.11)
|
90
|
+
simplecov-html (0.12.2)
|
91
|
+
zeitwerk (2.4.0)
|
92
|
+
|
93
|
+
PLATFORMS
|
94
|
+
ruby
|
95
|
+
|
96
|
+
DEPENDENCIES
|
97
|
+
rspec
|
98
|
+
simplecov
|
99
|
+
waterdrop!
|
100
|
+
|
101
|
+
BUNDLED WITH
|
102
|
+
2.1.4
|
data/MIT-LICENCE
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
2
|
+
a copy of this software and associated documentation files (the
|
3
|
+
"Software"), to deal in the Software without restriction, including
|
4
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
5
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
6
|
+
permit persons to whom the Software is furnished to do so, subject to
|
7
|
+
the following conditions:
|
8
|
+
|
9
|
+
The above copyright notice and this permission notice shall be
|
10
|
+
included in all copies or substantial portions of the Software.
|
11
|
+
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
13
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
14
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
15
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
16
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
17
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
18
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
# WaterDrop
|
2
|
+
|
3
|
+
[](https://travis-ci.org/karafka/waterdrop)
|
4
|
+
[](https://gitter.im/karafka/karafka?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
5
|
+
|
6
|
+
Gem used to send messages to Kafka in an easy way with an extra validation layer. It is a part of the [Karafka](https://github.com/karafka/karafka) ecosystem.
|
7
|
+
|
8
|
+
WaterDrop is based on Zendesks [delivery_boy](https://github.com/zendesk/delivery_boy) gem.
|
9
|
+
|
10
|
+
It is:
|
11
|
+
|
12
|
+
- Thread safe
|
13
|
+
- Supports sync and async producers
|
14
|
+
- Working with 0.11+ Kafka
|
15
|
+
|
16
|
+
## Installation
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem install waterdrop
|
20
|
+
```
|
21
|
+
|
22
|
+
or add this to your Gemfile:
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
gem 'waterdrop'
|
26
|
+
```
|
27
|
+
|
28
|
+
and run
|
29
|
+
|
30
|
+
```
|
31
|
+
bundle install
|
32
|
+
```
|
33
|
+
|
34
|
+
## Setup
|
35
|
+
|
36
|
+
WaterDrop is a complex tool, that contains multiple configuration options. To keep everything organized, all the configuration options were divided into two groups:
|
37
|
+
|
38
|
+
- WaterDrop options - options directly related to Karafka framework and it's components
|
39
|
+
- Ruby-Kafka driver options - options related to Ruby-Kafka/Delivery boy
|
40
|
+
|
41
|
+
To apply all those configuration options, you need to use the ```#setup``` method:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
WaterDrop.setup do |config|
|
45
|
+
config.deliver = true
|
46
|
+
config.kafka.seed_brokers = %w[kafka://localhost:9092]
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
### WaterDrop configuration options
|
51
|
+
|
52
|
+
| Option | Description |
|
53
|
+
|-----------------------------|------------------------------------------------------------------|
|
54
|
+
| client_id | This is how the client will identify itself to the Kafka brokers |
|
55
|
+
| logger | Logger that we want to use |
|
56
|
+
| deliver | Should we send messages to Kafka |
|
57
|
+
|
58
|
+
### Ruby-Kafka driver and Delivery boy configuration options
|
59
|
+
|
60
|
+
**Note:** We've listed here only **the most important** configuration options. If you're interested in all the options, please go to the [config.rb](https://github.com/karafka/waterdrop/blob/master/lib/water_drop/config.rb) file for more details.
|
61
|
+
|
62
|
+
**Note:** All the options are subject to validations. In order to check what is and what is not acceptable, please go to the [config.rb validation schema](https://github.com/karafka/waterdrop/blob/master/lib/water_drop/schemas/config.rb) file.
|
63
|
+
|
64
|
+
| Option | Description |
|
65
|
+
|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
|
66
|
+
| raise_on_buffer_overflow | Should we raise an exception, when messages can't be sent in an async way due to the message buffer overflow or should we just drop them |
|
67
|
+
| delivery_interval | The number of seconds between background message deliveries. Disable timer-based background deliveries by setting this to 0. |
|
68
|
+
| delivery_threshold | The number of buffered messages that will trigger a background message delivery. Disable buffer size based background deliveries by setting this to 0.|
|
69
|
+
| required_acks | The number of Kafka replicas that must acknowledge messages before they're considered as successfully written. |
|
70
|
+
| ack_timeout | A timeout executed by a broker when the client is sending messages to it. |
|
71
|
+
| max_retries | The number of retries when attempting to deliver messages. |
|
72
|
+
| retry_backoff | The number of seconds to wait after a failed attempt to send messages to a Kafka broker before retrying. |
|
73
|
+
| max_buffer_bytesize | The maximum number of bytes allowed in the buffer before new messages are rejected. |
|
74
|
+
| max_buffer_size | The maximum number of messages allowed in the buffer before new messages are rejected. |
|
75
|
+
| max_queue_size | The maximum number of messages allowed in the queue before new messages are rejected. |
|
76
|
+
| sasl_plain_username | The username used to authenticate. |
|
77
|
+
| sasl_plain_password | The password used to authenticate. |
|
78
|
+
|
79
|
+
This configuration can be also placed in *config/initializers* and can vary based on the environment:
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
WaterDrop.setup do |config|
|
83
|
+
config.deliver = Rails.env.production?
|
84
|
+
config.kafka.seed_brokers = [Rails.env.production? ? 'kafka://prod-host:9091' : 'kafka://localhost:9092']
|
85
|
+
end
|
86
|
+
```
|
87
|
+
|
88
|
+
## Usage
|
89
|
+
|
90
|
+
To send Kafka messages, just use one of the producers:
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
WaterDrop::SyncProducer.call('message', topic: 'my-topic')
|
94
|
+
# or for async
|
95
|
+
WaterDrop::AsyncProducer.call('message', topic: 'my-topic')
|
96
|
+
```
|
97
|
+
|
98
|
+
Both ```SyncProducer``` and ```AsyncProducer``` accept following options:
|
99
|
+
|
100
|
+
| Option | Required | Value type | Description |
|
101
|
+
|-------------------- |----------|------------|---------------------------------------------------------------------|
|
102
|
+
| ```topic``` | true | String | The Kafka topic that should be written to |
|
103
|
+
| ```key``` | false | String | The key that should be set in the Kafka message |
|
104
|
+
| ```partition``` | false | Integer | A specific partition number that should be written to |
|
105
|
+
| ```partition_key``` | false | String | A string that can be used to deterministically select the partition |
|
106
|
+
| ```create_time``` | false | Time | The timestamp that should be set on the message |
|
107
|
+
| ```headers``` | false | Hash | Headers for the message |
|
108
|
+
|
109
|
+
Keep in mind, that message you want to send should be either binary or stringified (to_s, to_json, etc).
|
110
|
+
|
111
|
+
## References
|
112
|
+
|
113
|
+
* [Karafka framework](https://github.com/karafka/karafka)
|
114
|
+
* [WaterDrop Travis CI](https://travis-ci.org/karafka/waterdrop)
|
115
|
+
* [WaterDrop Coditsu](https://app.coditsu.io/karafka/repositories/waterdrop)
|
116
|
+
|
117
|
+
## Note on contributions
|
118
|
+
|
119
|
+
First, thank you for considering contributing to WaterDrop! It's people like you that make the open source community such a great community!
|
120
|
+
|
121
|
+
Each pull request must pass all the RSpec specs and meet our quality requirements.
|
122
|
+
|
123
|
+
To check if everything is as it should be, we use [Coditsu](https://coditsu.io) that combines multiple linters and code analyzers for both code and documentation. Once you're done with your changes, submit a pull request.
|
124
|
+
|
125
|
+
Coditsu will automatically check your work against our quality standards. You can find your commit check results on the [builds page](https://app.coditsu.io/karafka/repositories/waterdrop/builds/commit_builds) of WaterDrop repository.
|
126
|
+
|
127
|
+
[](https://app.coditsu.io/karafka/repositories/waterdrop/builds/commit_builds)
|