jruby-kafka 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 564d271530073f6d8413d50394b2151f03f7ee77
4
- data.tar.gz: e2bbd5809a55bfbbb15aaceece6ec817df06792e
3
+ metadata.gz: b854790fa9d012c35cb74d4ca6b6db7f5c568a2f
4
+ data.tar.gz: 5f98478a4cfc09730a1ce092108d72798b6e8075
5
5
  SHA512:
6
- metadata.gz: 4ef48c827f64b23a8d83eb976bc25414d4c00baf843a573a5f7cfbcff03d5d1f40c7d838ef44dfd572940cc3fa39922aa8d5a9959c791fc4fe8c8a217000cff6
7
- data.tar.gz: f80010fdc76babda95c2e40db3ed47a54443f491b97318f705321cf2aa37815f325da25a5f918246cb72c79664e2290f531bf06e10947502b95b2baa262f5ce9
6
+ metadata.gz: b46e5f6cfa518c2b91a614b956d0a617d066aa80922c391ea1fa298f987e466b5a3199c5f97ff86f31cbcb5081f1e04786f836754d10f27b0d4ce8d93c183cb6
7
+ data.tar.gz: 69ea85ee730a74ccb3b7e3159701d090c521d301663d4ac9cd4dbc6cfeff6bc5c352d8fceea2530c68faa7d7438f8cd8a895faed3a5b25d7a9a8d9376424cecc
@@ -0,0 +1,130 @@
1
+ # basically we are porting this https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Producer+Example
2
+
3
+ require "java"
4
+
5
+ require "jruby-kafka/namespace"
6
+ require "jruby-kafka/error"
7
+
8
+ java_import 'org.I0Itec.zkclient.exception.ZkException'
9
+
10
+ class Kafka::Producer
11
+ @topic
12
+ @zk_connect
13
+
14
+ # Create a Kafka Producer
15
+ #
16
+ # options:
17
+ # :zk_connect => "localhost:2181" - REQUIRED: The connection string for the
18
+ # zookeeper connection in the form host:port. Multiple URLS can be given to allow fail-over.
19
+ # :zk_connect_timeout => "6000" - (optional) The max time that the client waits while establishing a connection to zookeeper.
20
+ # :topic_id => "topic" - REQUIRED: The topic id to consume on.
21
+ # :broker_list => "localhost:9092" - REQUIRED: a seed list of kafka brokers
22
+ def initialize(options={})
23
+ validate_required_arguments(options)
24
+
25
+ @zk_connect = options[:zk_connect]
26
+ @topic = options[:topic_id]
27
+ @brokers = options[:broker_list]
28
+ @zk_session_timeout = '6000'
29
+ @zk_connect_timeout = '6000'
30
+ @zk_sync_time = '2000'
31
+ @auto_offset_reset = 'largest'
32
+ @auto_commit_interval = '1000'
33
+ @running = false
34
+ @rebalance_max_retries = '4'
35
+ @rebalance_backoff_ms = '2000'
36
+ @socket_timeout_ms = "#{30 * 1000}"
37
+ @socket_receive_buffer_bytes = "#{64 * 1024}"
38
+ @auto_commit_enable = "#{true}"
39
+ @queued_max_message_chunks = '10'
40
+ @refresh_leader_backoff_ms = '200'
41
+ @consumer_timeout_ms = '-1'
42
+
43
+ if options[:zk_connect_timeout]
44
+ @zk_connect_timeout = "#{options[:zk_connect_timeout]}"
45
+ end
46
+ if options[:zk_session_timeout]
47
+ @zk_session_timeout = "#{options[:zk_session_timeout]}"
48
+ end
49
+ if options[:zk_sync_time]
50
+ @zk_sync_time = "#{options[:zk_sync_time]}"
51
+ end
52
+ if options[:auto_commit_interval]
53
+ @auto_commit_interval = "#{options[:auto_commit_interval]}"
54
+ end
55
+
56
+ if options[:rebalance_max_retries]
57
+ @rebalance_max_retries = "#{options[:rebalance_max_retries]}"
58
+ end
59
+
60
+ if options[:rebalance_backoff_ms]
61
+ @rebalance_backoff_ms = "#{options[:rebalance_backoff_ms]}"
62
+ end
63
+
64
+ if options[:socket_timeout_ms]
65
+ @socket_timeout_ms = "#{options[:socket_timeout_ms]}"
66
+ end
67
+
68
+ if options[:socket_receive_buffer_bytes]
69
+ @socket_receive_buffer_bytes = "#{options[:socket_receive_buffer_bytes]}"
70
+ end
71
+
72
+ if options[:auto_commit_enable]
73
+ @auto_commit_enable = "#{options[:auto_commit_enable]}"
74
+ end
75
+
76
+ if options[:refresh_leader_backoff_ms]
77
+ @refresh_leader_backoff_ms = "#{options[:refresh_leader_backoff_ms]}"
78
+ end
79
+
80
+ if options[:consumer_timeout_ms]
81
+ @consumer_timeout_ms = "#{options[:consumer_timeout_ms]}"
82
+ end
83
+
84
+ end
85
+
86
+ private
87
+ def validate_required_arguments(options={})
88
+ [:zk_connect, :broker_list, :topic_id].each do |opt|
89
+ raise(ArgumentError, "#{opt} is required.") unless options[opt]
90
+ end
91
+ end
92
+
93
+ public
94
+ def shutdown()
95
+ @running = false
96
+ end
97
+
98
+ public
99
+ def connect()
100
+ @producer = Java::kafka::producer::Producer.new(createProducerConfig)
101
+ end
102
+
103
+ public
104
+ def sendMsg(key,msg)
105
+ m = Java::kafka::producer::KeyedMessage.new(topic=@topic,key=key, message=msg)
106
+ #the send message for a producer is scala varargs, which doesn't seem to play nice w/ jruby
107
+ # this is the best I could come up with
108
+ ms = Java::scala::collection::immutable::Vector.new(0,0,0)
109
+ ms = ms.append_front(m)
110
+ @producer.send(ms)
111
+ end
112
+
113
+ public
114
+ def running?
115
+ @running
116
+ end
117
+
118
+ def createProducerConfig()
119
+ # TODO lots more options avaiable here: http://kafka.apache.org/documentation.html#producerconfigs
120
+ properties = java.util.Properties.new()
121
+ properties.put("zookeeper.connect", @zk_connect)
122
+ properties.put("zookeeper.connection.timeout.ms", @zk_connect_timeout)
123
+ properties.put("zookeeper.session.timeout.ms", @zk_session_timeout)
124
+ properties.put("zookeeper.sync.time.ms", @zk_sync_time)
125
+ properties.put("serializer.class", "kafka.serializer.StringEncoder")
126
+ properties.put("request.required.acks", "1")
127
+ properties.put("metadata.broker.list", @brokers)
128
+ return Java::kafka::producer::ProducerConfig.new(properties)
129
+ end
130
+ end
data/lib/jruby-kafka.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "jruby-kafka/consumer"
2
2
  require "jruby-kafka/group"
3
+ require "jruby-kafka/producer"
3
4
 
4
5
  module Kafka
5
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jruby-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Lawson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-05 00:00:00.000000000 Z
11
+ date: 2014-01-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: this is primarily to be used as an interface for logstash
14
14
  email:
@@ -25,6 +25,7 @@ files:
25
25
  - lib/jruby-kafka/error.rb
26
26
  - lib/jruby-kafka/group.rb
27
27
  - lib/jruby-kafka/namespace.rb
28
+ - lib/jruby-kafka/producer.rb
28
29
  homepage: https://github.com/joekiller/jruby-kafka
29
30
  licenses:
30
31
  - Apache 2.0