Как использовать приложение Android в качестве "клиента-производителя" для Kafka?

Возможно ли / имеет ли смысл использовать приложение Android в качестве "клиента-производителя" для Apache Kafka?

Допустим, мое приложение для Android должно собирать и анализировать данные о времени реакции. Цель состоит в том, чтобы собрать все данные и показать среднее время реакции в режиме реального времени в приложении.

В качестве альтернативы можно использовать сервер приложений в качестве посредника, который принимает сообщения от приложения для Android и отправляет их в Kafka, вместо того чтобы приложение само по себе являлось производителем Kafka.

3 ответа

Решение

Даже если это возможно, на мой взгляд, у него есть некоторые недостатки.

В целом, я бы хотел, чтобы клиенты были максимально простыми, чтобы избежать проблем с обслуживанием. Вместо этого я бы направил все клиентские запросы через REST API на моем сервере приложений. Недостатки не связаны с Кафкой, но являются распространенными проблемами местных клиентов.

Связь

Вы тесно связываете приложение Android со своей инфраструктурой обмена сообщениями. Если позже вы решите, что решение Kafka - это слишком много, и Plain Old Java будет достаточно хорош, вам сначала нужно обновить приложение Android и подождать, пока достаточное количество пользователей сделает обновление.

Аутентификация

Возможно, у вас уже есть какая-то аутентификация в вашем приложении. Вы также можете создавать аутентифицированные соединения с Kafka. Таким образом, у вас будет два пути аутентификации, тогда как для сервера приложений Kafka нужно только проверять, поступают ли запросы от доверенного сервера приложений, что означает меньшие усилия по внедрению.

...

Я думаю, что это будет иметь много смысла:

  • Kafka-clients.jar возможность автоматического переподключения, что очень полезно, когда телефон подключен к Интернету
  • Kafka-clients.jar довольно тонкий и не включает в себя код сервера Kafka (он даже не зависит от Scala).

К сожалению, сейчас он не совместим с Android: KAFKA-7025. Если вы хотите, чтобы это произошло, просьба сообщить о проблеме JIRA.

Я считаю, что приложение Android может использовать защищенное соединение с кластером Kafka Broker, например, с использованием SASL. Однако это должно быть сделано в сочетании с любой другой связью, которая может поддерживать синхронизированную ротацию ключей, которая инициализируется любым удаленным сервером с синхронизацией с кластером брокера. Любой конкретный экземпляр мобильного приложения может прослушивать конкретную тему и создавать сообщения в связанной теме, которая создается при регистрации экземпляра с использованием сервера REST. Любой десериализатор проверяет заголовки или ключи для токена, которые назначаются с помощью REST при регистрации в том же сервисе. Пользовательское шифрование может быть предоставлено аналогичным образом. Технически это решаемо. Но каковы преимущества, например, перед использованием Firebase? Расходы я вижу с самого начала. Преимущества???

Другие вопросы по тегам