Java Spring云流运动绑定器-并发
我用以下组件构建了一个spring boot kinesis consumer:Java Spring云流运动绑定器-并发,java,spring-integration,spring-cloud-stream,amazon-kinesis,cloud-foundry,Java,Spring Integration,Spring Cloud Stream,Amazon Kinesis,Cloud Foundry,我用以下组件构建了一个spring boot kinesis consumer: spring启动(版本-2.1.2.发行版) SpringCloud(版本-Greenwich.RELEASE) spring cloud stream kinesis活页夹(版本-1.1.0.发行版) 我使用带有1个碎片的运动流中的事件。这个spring boot消费者应用程序也运行在关键的Cloud Foundry平台上 在发布这个问题之前,我在本地(使用了kinesalite)和PCF(使用了kinesi
- spring启动(版本-2.1.2.发行版)
- SpringCloud(版本-Greenwich.RELEASE)
- spring cloud stream kinesis活页夹(版本-1.1.0.发行版)
请参见
kinesismsessagedrivenchanneladapter
中的concurrency
选项JavaDocs:
/**
* The maximum number of concurrent {@link ConsumerInvoker}s running.
* The {@link ShardConsumer}s are evenly distributed between {@link ConsumerInvoker}s.
* Messages from within the same shard will be processed sequentially.
* In other words each shard is tied with the particular thread.
* By default the concurrency is unlimited and shard
* is processed in the {@link #consumerExecutor} directly.
* @param concurrency the concurrency maximum number
*/
public void setConcurrency(int concurrency) {
因此,由于在一个流中只有一个shard,因此只有一个活动线程在单个shard上迭代ShardIterator
s
关键是,我们总是必须在单个线程中处理来自单个碎片的记录。通过这种方式,我们保证了正确的顺序,并且对最高的序列号执行了检查点
请进一步调查什么是AWS运动以及它是如何工作的。感谢您的回复。当kinesis流有1个碎片时,将使用者并发性设置为大于1的值有什么意义?没有什么?另外,如果instanceCount是一个PCF应用程序,并且实例数设置在清单级别,您能告诉我我是否应该担心它吗?只要这三个实例都使用相同的使用者组名称、检查点表和锁表,我就可以从高可用性角度进行设置,对吗?是的,如果您只使用一个碎片,则会忽略并发性。在PCF上使用
instanceCount
的情况下,正如您所注意到的,它只对高可用性有意义,仅此而已。当您有多个碎片或使用多个流进行消费时,并发性
开始发挥作用。谢谢Artem。这回答了我所有的问题。从AWS Kinesis的角度来看,我知道只有当您有超过1个碎片时,才能实现并行性或高吞吐量。活页夹中的并发属性让我有点不舒服。它给了我一个错误的假设,即多个线程将并行处理单个碎片,如果顺序不重要,我可以使用它。您的详细解释澄清了,对我来说,并发性没有任何意义,因为我有一个碎片。无论如何,我需要HA,我知道它与并发无关。我将在清单级别设置实例并删除并发性。这是一个计划!看来是时候接受这个答案了:是的。再次感谢