SpringXD和Spring Integration:每隔X分钟从kafka主题中读取一次,然后发送到另一个主题

时间:2017-03-23 22:01:07

标签: java spring apache-kafka spring-integration spring-xd

我正在尝试实现一个解决方案来创建一个由kafka源,桥接模块和kafka接收器组成的SpringXD流。

所以我有类似的东西:

<channel id="pollable">
    <queue />
</channel>

<bridge input-channel="pollable" output-channel="executorChannel">
    <poller max-messages-per-poll="5" fixed-rate="5000" />
</bridge>

我的问题是我想以某种方式避开轮询者。基本上是因为当这些消息在队列中时我想避免将消息保留在内存中。我宁愿每隔X分钟从kafka读取一次,只需从队列中取出Y消息,然后将这些消息发送到下一个主题。

看起来我无法摆脱队列,但后来我的问题是:还有其他选择吗?我不喜欢把东西留在内存中,但我也不想使用这个选项:http://docs.spring.io/spring-integration/reference/html/system-management-chapter.html#message-store

1 个答案:

答案 0 :(得分:1)

将数据保存在内存中并不是一个好主意。

您可以根据需要stop()start()频道适配器(KafkaMessageDrivenChannelAdapter);它将在重新启动时从中断处继续。

但是,kafka源代码使用的是spring-integration-kafka(1.3.x)的旧版本。

如果您创建自定义源以使用spring-integration-kafka 2.1.0(使用kafka 0.10.1.x客户端),则可以设置kafka属性max.poll.records以限制提取的记录数