Как использовать приложение 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? Расходы я вижу с самого начала. Преимущества???