卡夫卡和阿卡集群

时间:2016-04-10 23:12:23

标签: akka apache-kafka akka-cluster

以下是我的用例

  1. 一堆应用程序将Kafka中的消息排列在不同的主题下。
  2. 让每个主题的使用者将工作分发给群集中的工作者。这项工作可分为长期运行,内存密集型,简单等,并相应地选择工作人员。
  3. 这让我探索了Akka集群的工作分配,路由和扩展。我可以使用Akka" Supervisor"作为Kafka消费者,并根据其分类将传入的工作分配给适当的工作人员。

    但我仍然想要了解的是在Akka集群中实施主管和工作人员之间的弹性通信方式的正确方法。因为一旦主管消费来自Kafka的消息,就会承诺Kafka抵消。如果在偏移提交之后的处理中发生了一些错误,那么以下可接受的方法是从上次离开的位置恢复和启动吗?

    使用Kafka支持的持久邮箱使主管成为持久性actor。主管在Kafka排队工作,工人从Kafka获得工作,并在完成工作后才提供抵消。

1 个答案:

答案 0 :(得分:2)

正如Jaakko所说,这实际上取决于您使用的第三方库。

就我而言,我已经成功使用了Akka Streams Kafka,尽管我确实启用了偏移自动提交。

但是,此库可能会满足您的需求,因为它允许您自定义偏移提交(请参阅External Offset StorageOffset 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,它的效果非常好。

希望你能找到你想要的东西:)