Запуск потребителей Kafka, которые взаимодействуют с приложением Flask

в надежде получить помощь по какому-то общему архитектурному вопросу.

У меня есть веб-приложение Flask (назовем его приложением для людей), которое работает в контейнере Docker. Он развернут в Amazon ECS и работает нормально. people-app предоставляет HTTP API, в котором авторизованные пользователи могут взаимодействовать с помощью токена, а также некоторые традиционные страницы веб-приложений.

Что я хотел бы сделать, так это реализовать группу потребителей Kafka, которая предназначалась для потребления из темы, связанной с приложением Flask (т.е. темы людей), и при потреблении взаимодействовать с приложением Flask (возможно, создавая экземпляры модели и сохраняя их к базе данных, аналогично тому, как HTTP API будет обрабатывать HTTP-запрос). Я нигде не смог найти примеров реализации, особенно на питоне, но я бы сказал, что пытаюсь добиться чего-то похожего на фреймворк событий от Криса Ричардсона.

Я думаю, мой вопрос сводится к; Как бы я реализовал что-то подобное? Если Kafka Consumers работают в непрерывном цикле, я предполагаю, что они должны запускаться в своем собственном, отдельном процессе. Похоже, это создает проблемы с Docker, поскольку запуск нескольких процессов в контейнере фактически лишает контейнер возможности эффективно взаимодействовать с приложениями.

Должен ли я запускать отдельные контейнеры? Если да, то как эти два контейнера будут взаимодействовать? Я что-то пропустил? Я здесь совершенно не на том пути?

Любая помощь будет принята с благодарностью, даже если это что-то маленькое, чтобы направить меня на правильный путь. Заранее спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 299
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы предложил использовать отдельные контейнеры для вашего приложения flask и приложения kafka. Это соответствует принципу единой ответственности при проектировании хорошего программного обеспечения.

Вам не нужно изучать java, вы можете программировать на python, перейдите по ссылке ниже https://towardsdatascience.com/kafka-python-explained-in-10-lines-of-code-800e3e07dad1

Вы можете проверить документы AWS для контейнерной сети в ECS. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html[2]

Пожалуйста, ознакомьтесь с этой статьей о том, как создать несколько задач или услуг. Вы можете использовать сеть awsvpc или bridge. В режиме awsvpc каждый из ваших контейнеров будет иметь собственный частный IP-адрес и может прикреплять группу безопасности. С сетью bridge вы можете сопоставить порт контейнера с хостом, и контейнеры могут получать доступ друг к другу через локальный хост: порт. https://www.freecodecamp.org/news/amazon-ecs-terms-and-architecture-807d8c4960fd/https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html

Вы также можете проверить AWS Farget для среды выполнения вашего контейнера.

Привет Радждип, спасибо, что нашли время ответить. Что касается написания Java, я упоминал об этом только в том смысле, что он относится к Eventuate Framework, в том смысле, что я не могу «просто использовать eventuate». Я понимаю, что это заявление было ненужным, и я его отредактирую. Мое мнение о том, что и потребитель, и фляжное приложение находятся в одном контейнере, заключалось в том, что, поскольку они находятся в одном домене, они разделяют эту «единую ответственность». Тем не менее, имеет больше смысла, что запуск фляги или потребительского приложения является «единственной ответственностью» контейнера. Еще раз спасибо за ваше понимание

Brady Perry 10.12.2020 20:44

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