Karafka框架1.4.0发布说明(Ruby + Kafka)

253 阅读2分钟

这个版本主要解决了与消息反序列化有关的问题,并规范了一些命名规则,以便在升级到即将到来的2.0 版本时更方便。

注意:这个版本是最后一个使用ruby-kafka 的版本。我们已经开始转移到rdkafka-ruby

注意:如果你正在使用Sidekiq-Backend 插件,请确保在升级Karafka宝石之前,你已经处理了Sidekiq队列中的所有作业。

变化(功能、不兼容等)

consumer#metadata 现在是consumer#batch_metadata

这个变化是微不足道的:如果您使用批处理消耗模式,并且您使用Consumer#metadata 方法,请将其替换为Consumer#batch_metadata

# Karafka 1.3
class UsersConsumer < ApplicationConsumer
  def consume
    puts metadata
  end
end

# Karafka 1.4
class UsersConsumer < ApplicationConsumer
  def consume
    puts batch_metadata
  end
end

消息元数据在#metadata 方法下可用

直到1.3 ,所有的消息元数据都可以在params 对象的根范围内直接使用,既可以直接引用方法,也可以使用#[] 访问器。

虽然这感觉像 "Rails的方式",但它有几个副作用,其中最大的副作用是需要有一个类似哈希的API,在没有反序列化有效载荷的情况下访问元数据的问题,以及有效载荷和元数据之间缺乏明确的分离。

从现在开始,你可以使用params.metadata 对象来获取所有的元数据。

注意:我们保留了从params 对象中直接获取元数据值的做法,以保持向后兼容。

# 1.3
params['partition'] #=> 0
params.partition #=> 0

# 1.4
params['partition'] #=> NoMethodError (undefined method '[]')

# This will work due to backward compatibility
params.partition #=> 0

# This is the recommended way of accessing metadata
params.metadata.partition #=> 0

# This will also work as metadata is a struct now
params.metadata[:partition] #=> 0
params.metadata['partition'] #=> 0

允许在没有消息反序列化的情况下访问消息元数据

当访问元数据时,在使用#payload 方法之前,有效载荷是不会被反序列化的。

默认JSON反序列化器中的空消息支持

当Kafka消息的有效载荷是null /nil ,反序列化就不会失败。由于一些Karafka用户使用带有nil 有效载荷的日志压缩,所以增加了对它的支持。在这种情况下,#payload 将返回nil

Karafka::Params::Params 不再继承于一个Hash

Karafka::Params::Params 现在只是一个结构。这一改变是为了使设置正常化,限制角落里的情况,并将接口简化为真正需要的方法。

开始使用Karafka

如果你想尽快开始使用Kafka和Karafka,那么最好的办法就是直接克隆我们的示例仓库。

git clone https://github.com/karafka/example-app ./example_app

然后,捆绑安装所有的依赖项。

cd ./example_app
bundle install

并按照[示例应用程序Wiki]的说明进行操作。