在Lagom微服务中摄取流数据的最佳方法

时间:2017-04-06 12:30:23

标签: scala apache-kafka kafka-producer-api lagom

我正在创建流式分析应用程序,其中每个分析/功能将作为微服务实现,以便此分析能够在以后的不同项目中使用。

我使用Lagom创建微服务。我是拉格姆的新手,这就是我遇到一些疑惑的原因。

我不明白将我的数据流(来自多个传感器)发布到微服务的最佳方法是什么,然后这个微服务将数据发布到kafka主题。

  1. 服务描述中的流消息的Lagom功能 ServiceCall [Source [String,NotUsed],Source [String,NotUsed]] 是从数百个wifi传感器发布数据流(大数据)的正确方法吗?是否有租约来处理接近实时(= 5秒)的大量数据流?

  2. 第二,将数据发布到kafka主题为什么我必须这样做 实现持久实体(由Lagom推荐)?因为卡夫卡 本身保证至少一次传递消息

  3. 我的应用程序不是CRUD应用程序,它只支持处理流数据。

1 个答案:

答案 0 :(得分:2)

  1. Lagom的流媒体呼叫使用WebSockets。它基于Play的WebSocket支持,可以扩展到数百万个连接的客户端。我不会将数百个wifi传感器称为大量数据,Lagom应该可以轻松处理它,并且Lagom也可以轻松地进行水平扩展,因此如果您正在进行的处理很繁重,您可以轻松地将处理扩展到多个节点

  2. Lagom目前不支持将传入的WebSocket流发布到Kafka。虽然一旦消息发布到Kafka ,Kafka确实至少保证一次,但在第一次将消息发送到Kafka时,没有这样的保证。例如,如果您执行副作用(例如更新数据库),然后发布消息,则无法保证如果应用程序在更新数据库时以及消息发布到Kafka之间崩溃,那么该消息最终会发表到卡夫卡(事实上它不会,这个信息将丢失)。这就是为什么Lagom鼓励只将数据库事件流发布到Kafka,因为以这种方式发布事件日志确保了任何需要发送到Kafka的数据库操作确实至少发生一次。但是,如果你没有做副作用,听起来你不是,那么这可能与你无关。在这种情况下我建议的是直接使用akka-streams-kafka(基于Lagom的Kafka支持)。

  3. 我提出了一个引用您的用例here的问题。