message2, message1 kafka
------------------------------
|message1 |message2
| |
Instace1 Instance2
在下面的示例中,我有两个正在处理来自kafka的消息的服务实例,但我希望确保message2
只在message1
之后处理。
显然,通过将一个实例配置为仅从特定分区消费,可以很容易地解决这种情况,该分区将存储带有公共标识符的消息:
message2, message1 kafka
--------------------------------
| message2
| message1
Instance1 Instance2
现在顺序得到了保证,message2
将永远不会在message1
之前处理。
但是,我在想这个问题是否可以用另一种方式来解决,直接在代码中而不是依赖基础设施?这看起来可能是微服务架构中的一个标准问题,但我不确定哪种方法是解决它的首选方法?
我建议基础设施是更“正确”的方法,但是用代码解决这个问题应该是可行的:
如果您有一个消息生成器,请将直接在前的消息的标识符附加到消息中,并且在使用该消息之前确保您使用了直接在前的消息。
如果您有多个生产者,这将变得更加棘手,因为您必须同步标识符。
Storm 通过 Trident 对保证消息处理提供了不同的 level ,包括 best effort(尽力而为),at least once (至少一次)和exactly once(至少一次). 这张页面描述如何保证至少处理一次. What does it mean for a message to be "fully processed"?(一条信息被完全处理是什么意思) 一个 tuple
我知道,如果我们在消费者组中有多个分区和几乎相同数量的消费者,那么处理速度会加快。如果我们想保持事件的顺序并在收到每个事件时处理它,我们如何使用多个分区和消费者来实现这一点。 在我的用例中,按顺序处理事件非常关键,否则系统会崩溃。我想使用多个分区来增加并行性,但不知何故“让它们按顺序”。
如果对于Azure服务总线主题,则存在带有某个筛选器的单个订阅。有一个微服务a为订阅创建了,并发度为1,用于读取消息。此外,如果存在该服务A的2个这样的副本,并且比方说,在t1、t2和t3时间插入到主题的服务总线主题中有3条消息。
我有一个具有多个节点的Hazelcast集群,每个节点都由一个“守护进程”服务器进程的相同实例组成。这些守护进程是带有嵌入式Hazelcast缓存以及构成我的平台核心的逻辑的Java应用程序。我需要将平台上的某些事件分发给集群中的侦听器,这些侦听器可以驻留在任何(或所有)连接的节点中。从我阅读的文档来看,如果我在守护进程启动时将EntryEventListener附加到映射,那么每当该映射中发生事
问题内容: 我想处理对象中的列表。我必须确保处理所有元素,以便收到它们。 因此l,我应该使用它吗? 还是只要不使用并行性就足以使用流? 问题答案: 你在问错问题。你正在询问而要按顺序处理项目,因此你必须询问订购。如果你有顺序的流并执行保证维持顺序的操作,则该流是并行处理还是顺序处理都没有关系;实施将维持秩序。 有序属性不同于并行与顺序。例如,如果你调用一个同时调用流将是无序在List返回的有序流。
我已经设置了一个Flink 1.2独立集群,其中包含2个JobManager和3个TaskManager,我正在使用JMeter通过生成Kafka消息/事件对其进行负载测试,然后处理这些消息/事件。处理作业在TaskManager上运行,通常需要大约15K个事件/秒。 作业已设置EXACTLY_ONCE检查点,并将状态和检查点持久化到Amazon S3。如果我关闭运行作业的TaskManager需