与Kafka相比,我更熟悉SNS/SQS和Lambda。
Lambda在没有请求时休眠一段时间。如果消息被丢弃到SQS,它将触发lambda"唤醒"。这样就实现了消息传递+按次付费的微服务。
对于Kafka,有消费者&生产商。消费者总是在听,因此总是在听。在Kubernetes或其他无服务器平台(如Fargate, ECS, App Runner等)中运行容器
如何在Kafka消费者中实现以下扩展行为:
- 如果没有请求,微观服务应该缩减为零
- 但是如果消息在此期间被丢弃到Kafka,它应该唤醒它。
我是否需要一个始终运行/up的微服务来监听Kafka,或者有另一种方法来实现这一点。
我是否需要一个始终运行/启动的微服务来监听Kafka,或者有另一种方法来实现这一点
是的,听卡夫卡是一种"拉动"。机制,知道某个主题中是否有新记录的唯一方法是至少让消费者组的一个成员(即应用程序的一个实例)启动并运行。这确实可以防止将消费者规模缩小到零,同时能够保持对新事件的低延迟反应。
Kafka被认为可以处理大量的事件,这些事件可以由一个或多个分布式应用程序并行处理=>我们期望侦听一个主题的应用程序能够扩展到自身的许多实例。
如果是这种情况,那么你可以通过将应用的可扩展性与入站Kafka流量挂钩来接近你所描述的结果,让它将缩放到到一个实例,你可以为其分配尽可能少的资源。这将保证您在流量到达时立即对其做出反应,如果流量增加,自动缩放器应该让它再次扩展到许多实例。
请注意,Kafka在向生态系统的其他部分广播大量事件方面非常出色,它具有长期持久性、特定的排序保证和大量的数据集成选择。它不太适合点到点的消息传递,特别是在需要缩放到零的情况下。在这种情况下,AWS SQS可能更合适。听起来你在要求事件驱动的自动缩放。
如果你在Kubernetes中运行你的服务,那么你可以通过KEDA实现这些功能
我相信消息传递系统经常是实时使用的,它可以减少突然涌来的请求。
你要做的是减少某些资源/服务的正常运行时间。
我认为你可以通过任何类型的数据库实现这一点。您可以将状态列作为列,并且每次插入数据库时,都会触发.sh文件并启动服务器,服务将更新状态列为STATUS_DONE并完成工作