暂停流消耗

use*_*445 1 streaming integration messaging apache-kafka confluent

我正在开发一个在一分钟内处理很少记录的应用程序.请求率约为每分钟2次.这些请求是为一组数据创建和更新的.要求是交付保证,可靠的交付,订购保证和防止任何消息丢失.

  1. 我们的团队决定使用Kafka,我认为它不适合用例,因为Kafka最适合流数据.相反,我们可以更好地使用传统的消息模型.虽然卡夫卡确实提供每个分区排序,同样可以是传统的邮件系统上,如果消息的数目是低的和数据的来源也低实现.这是一个公平的陈述吗?

  2. 我们使用Kafka流来处理数据,处理要求我们对外部系统进行查找.如果外部系统不可用,那么当外部查找系统可用时,我们将停止处理并自动将消息传递到目标系统.目前,我们通过在处理过程中不断循环并检查系统是否可用来停止处理.a)这是在处理过程中中途停止流的最佳方法,以便它不再接收任何消息吗?b)数据流框架是否设计为在中途停止或暂停,以便它们在一段时间内完全停止使用流?

Mic*_*oll 7

关于你的观点2:

a)这是在处理过程中中途停止流的最佳方法,以便它不再接收任何消息吗?

如果在您的情况下,您的传入数据速率非常低(每分钟几条记录),那么当所需的依赖关系系统当前不可用时,可以暂停处理输入流.

在Kafka Streams中,实现这种行为的首选API - 正如你暗指的那样,并不是真正推荐的模式 - 是Processor API.

即便如此,您还需要回答几个重要问题,例如:

  • 如果外部系统长时间停机,您的流处理应用程序的期望/要求行为是什么?
  • 传入数据速率是否会在某个时刻增加,这可能意味着您需要放弃上面的暂停方法?

但同样,如果暂停是您想要或需要做的事情,那么您可以尝试一下.

b)数据流框架是否设计为在中途停止或暂停,以便它们在一段时间内完全停止使用流?

一些流处理工具允许您这样做.它是否是使用它们的最佳模式是一个不同的问题.

例如,您还可以考虑以下替代方案:您也可以自动将外部系统的数据摄取到Kafka中,例如通过Kafka的内置Kafka Connect框架.然后,在Kafka Streams中,您可以将此导出的数据读入KTable(将此KTable视为来自外部系统的最新数据的持续更新缓存),然后在原始的低速率之间执行流表连接输入流和这个KTable.这样的流表连接是一种常见的(和推荐的)模式,用于丰富带有边数据的传入数据流(免责声明:我写了这篇文章); 例如,使用最新的用户配置文件信息来丰富用户点击事件流.与当前查询外部系统的设置相结合的暂停行为相比,这种方法的优点之一是您的流处理应用程序将与外部系统的可用性(和可伸缩性)分离.