diff --git a/lib/kafka/compression.rb b/lib/kafka/compression.rb index af919e2e6..8e7848192 100644 --- a/lib/kafka/compression.rb +++ b/lib/kafka/compression.rb @@ -1,5 +1,6 @@ require "kafka/snappy_codec" require "kafka/gzip_codec" +require "kafka/lz4_codec" module Kafka module Compression @@ -8,6 +9,7 @@ def self.find_codec(name) when nil then nil when :snappy then SnappyCodec.new when :gzip then GzipCodec.new + when :lz4 then LZ4Codec.new else raise "Unknown compression codec #{name}" end end @@ -16,6 +18,7 @@ def self.find_codec_by_id(codec_id) case codec_id when 1 then GzipCodec.new when 2 then SnappyCodec.new + when 3 then LZ4Codec.new else raise "Unknown codec id #{codec_id}" end end diff --git a/lib/kafka/lz4_codec.rb b/lib/kafka/lz4_codec.rb new file mode 100644 index 000000000..83f4c5831 --- /dev/null +++ b/lib/kafka/lz4_codec.rb @@ -0,0 +1,21 @@ +module Kafka + class LZ4Codec + def initialize + require "extlz4" + rescue LoadError + raise LoadError, "using lz4 compression requires adding a dependency on the `extlz4` gem to your Gemfile." + end + + def codec_id + 3 + end + + def compress(data) + LZ4.encode(data) + end + + def decompress(data) + LZ4.decode(data) + end + end +end diff --git a/lib/kafka/version.rb b/lib/kafka/version.rb index e8fc68249..ce87bd3a8 100644 --- a/lib/kafka/version.rb +++ b/lib/kafka/version.rb @@ -1,3 +1,3 @@ module Kafka - VERSION = "0.5.1" + VERSION = "0.5.2" end diff --git a/ruby-kafka.gemspec b/ruby-kafka.gemspec index d35dc02f9..e5221485a 100644 --- a/ruby-kafka.gemspec +++ b/ruby-kafka.gemspec @@ -35,6 +35,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rspec-benchmark" spec.add_development_dependency "activesupport" spec.add_development_dependency "snappy" + spec.add_development_dependency "extlz4" spec.add_development_dependency "colored" spec.add_development_dependency "rspec_junit_formatter", "0.2.2" spec.add_development_dependency "dogstatsd-ruby", ">= 3.0.0"