如何将 Android 应用程序用作 Kafka 的 "Producing client"?

How to use Android App as a "Producing client" for Kafka?

是否可以/将 Android 应用程序用作 Apache Kafka 的 "Producing client" 是否有意义?

假设我的 Android 应用程序需要捕获和分析反应时间数据。目标是收集所有数据并在应用程序中实时显示平均反应时间。

备选方案是使用某种应用服务器作为 接受来自 android 应用程序的消息并将它们发布到 Kafka,而不是让应用程序自己成为 Kafka Producer。

即使可行,我认为它也有一些缺点。

总的来说,我喜欢客户端尽可能简单,以避免维护问题。相反,我将通过我的应用程序服务器上的 REST API 路由所有客户端请求。缺点与kafka无关,是native clients的通病

耦合

您正在将 Android 应用程序与您的消息传递基础架构紧密结合。如果您后来认为 Kafka 解决方案太多了,而 Plain Old Java 就足够了,您首先必须更新 Android 应用程序,然后等待足够多的用户进行更新。

网络问题 + 交付保证

Kafka 客户端还需要直接连接到每个代理。移动客户端可能具有非常 inconsistent/spotty 的网络连接,这使得直接客户端访问容易受到丢失事件和整体网络连接问题的影响。

身份验证

可能您的应用程序中已经有某种身份验证。您还可以创建 authenticated connections to Kafka。因此,您将拥有两个身份验证路径,而对于应用服务器,Kafka 只需要检查请求是否来自受信任的应用服务器,这意味着更少的实施工作。

...

我认为这很有意义:

  • Kafka-clients.jar 提供自动重新连接功能,这在 phone 的互联网连接不稳定时非常有用
  • Kafka-clients.jar 非常精简,不包含任何 Kafka 服务器代码(它甚至不依赖于 Scala)。

不幸的是,它现在与 Android 不兼容:KAFKA-7025。如果您希望看到这种情况发生,请为 JIRA 问题投票。