Бессерверная структура для триггера
Я ищу бессерверную структуру (бесплатно), где я могу создать триггер kafka, а при запуске должна запускаться функция kube (python)
Я пробовал nuclio, но проблема в том, что у меня версия kafka выше, и они не поддерживают версию выше 2.4.
Я хочу что-то вроде:
apiVersion: "nuclio.io/v1beta1"
kind: "NuclioFunction"
spec:
runtime: "python:3.6"
handler: NuclioKafkaHandler:consumer
minReplicas: 1
maxReplicas: 1
triggers:
myKafkaTrigger:
kind: kafka-cluster
attributes:
initialOffset: earliest
topics:
- nuclio
brokers:
- kafka-bootstrap:9092
consumerGroup: Consumer
И функция куба вроде:
def consumer(context, event):
context.logger.debug(event.body)
print(event.trigger.kind)
Так же просто, как эти два файла, и у меня уже есть кластер kafka, поэтому я просто хочу, чтобы на нем был триггер.
каковы возможные альтернативы помимо нуклио? Заглянул в кубелесс показалось сложным. Деление не поддерживает питон.
3 ответа
Точно такой же вариант использования возможен с Fission , бессерверной платформой с открытым исходным кодом для Kubernetes.
Вы можете создать триггер очереди сообщений для Kafka и связать его с бессерверной функцией следующим образом:
fission mqt create --name kafkatest --function consumer --mqtype kafka --mqtkind keda --topic request-topic --resptopic response-topic --errortopic error-topic
Это будет запускать функцию, называемую потребителем, всякий раз, когда в очереди темы запроса Kafka есть сообщение.
Вы также можете связать метаданные, такие как информация об аутентификации, как секреты или флаги, такие как интервалы опроса, максимальное количество попыток и т. д.
Ссылка: https://fission.io/docs/usage/triggers/message-queue-trigger-kind-keda/kafka/
Похоже, вы хотите запускать функции на основе событий Kafka. Это правильно?
Если это так, вы всегда можете попробовать OpenFaas. Это поможет вам начать работу с OpenFaas в Kubernetes. А затем вы можете запускать функции, опубликованные в темах Kafka, с помощью коннектора Kafka.
Я мало что знаю о Нуклио, но описанный вами сценарий выглядит возможным с Knative.
Самый простой способ - создать Knative Service для своего потребителя. Для части Kafka вы можете использовать KafkaSource, чтобы получить события в системе Knative Eventing. В вашем KafkaSource вы можете указать ему вызывать Knative Service, когда происходит событие, исходящее от Kafka.
Выше самый простой способ. Если вам нужны более продвинутые функции, есть также поддержка фильтрации на основе типов событий или наличия нескольких потребителей, подписанных на события, и других функций.
В учебнике Red Hat Knative Tutorial есть раздел для бессерверной обработки событий с помощью Kafka.