以下是我的用例
这让我探索了Akka集群的工作分配,路由和扩展。我可以使用Akka" Supervisor"作为Kafka消费者,并根据其分类将传入的工作分配给适当的工作人员。
但我仍然想要了解的是在Akka集群中实施主管和工作人员之间的弹性通信方式的正确方法。因为一旦主管消费来自Kafka的消息,就会承诺Kafka抵消。如果在偏移提交之后的处理中发生了一些错误,那么以下可接受的方法是从上次离开的位置恢复和启动吗?
使用Kafka支持的持久邮箱使主管成为持久性actor。主管在Kafka排队工作,工人从Kafka获得工作,并在完成工作后才提供抵消。
答案 0 :(得分:2)
正如Jaakko所说,这实际上取决于您使用的第三方库。
就我而言,我已经成功使用了Akka Streams Kafka,尽管我确实启用了偏移自动提交。
但是,此库可能会满足您的需求,因为它允许您自定义偏移提交(请参阅External Offset Storage和Offset Storage in Kafka部分。)
文档说:
Consumer.committableSource可以向Kafka提交抵消头寸。与自动提交相比,这可以准确控制消息何时被消耗。
要停用自动提交,您必须添加application.conf
部分来填写您的Akka akka.kafka.consumer
文件:
akka.kafka.consumer {
# Properties defined by org.apache.kafka.clients.consumer.ConsumerConfig
# can be defined in this configuration section.
kafka-clients {
# Disable auto-commit by default
enable.auto.commit = false
}
}
akka-stream-kafka_2.11
的最新版本(版本0.16
)与Akka 2.5.x
兼容,但您必须使用Akka工具包覆盖akka-stream_2.11依赖项。目前,我正在使用这个库与Akka 2.5.3
,它的效果非常好。
希望你能找到你想要的东西:)