当前位置: 首页 > 知识库问答 >
问题:

Kafka分区订购担保

姜德泽
2023-03-14

我确实意识到Kafka中保证了每个分区的顺序。但是当有多个分区并且生产者没有指定键,而只有1个消费者时,分区会受到什么影响(为什么有1个消费者?对于当前数据加载1很好,有多个分区供将来使用)

20 partitions
1 consumer
No key specified when producing.

1) 订购是否会受到影响?

2) 使用者是否会从分区0,1读取数据。。20一个接一个按顺序?

3) 即使我们指定了分区键,我们是否可以保证我们会进行适当的排序?(哈希冲突的情况除外)

共有1个答案

拓拔俊艾
2023-03-14

如果未在生产者端定义密钥,kafka每次将在每个分区中生成一条消息。以循环方式生成数据[此处编码]。

例如,如果您有2个分区:

msg_1 -> partition: 0
msg_2 -> partition: 1
msg_3 -> partition: 0
msg_4 -> partition: 1

这样做的问题是您无法确保另一侧的排序,因为每个分区消耗的消息可以在不同的时间内消耗。想象一下,您在分区0偏移量1中有一条消息,而第二条消息在分区1偏移量1中。Kafka消费者可以在进入分区0之前开始从分区1消费消息。

为了避免此问题,您应该始终对需要订单的消息使用相同的键。现在解决此问题的唯一方法是创建状态存储,并在每次需要阅读时检查文档的状态。

如果您设置了密钥,您将始终将密钥发送到同一分区,唯一的方法是在生产者端获得不同的顺序,但这将是一个竞争条件。只有当两个生产者同时生产同一个密钥时,才会出现订单中断的情况。你可以在这里检查逻辑。

 类似资料:
  • 我正在评估用作事件总线的不同流媒体/消息服务。我正在考虑的一个方面是每项服务提供的订购保证。我正在探索的两个选项是AWS Kinesis和Kafka,从较高的层次来看,它们似乎都提供了类似的订购保证,其中记录保证以仅在该碎片/分区中发布的相同顺序使用。 AWS Kinesis API似乎公开了父分片的id,因此使用KCL的消费者组可以确保具有相同分区键的记录可以按照发布顺序(假设是单线程发布者)被

  • 我想使用Mongo变更流,使用kafka Connect将变更事件从mongoDB推送到kafka Topic中。好消息是: > Kafka在分区内维持排序。 Mongo使用全局时钟维护排序。 但是,中间呢?kafka connect怎么样?它维持订购吗?这种订购是如何运作的?我找不到他们说Kafka维持秩序的地方。 这是一个场景: 在Mongo中-更新用户Bob以获得授权 在Mongo中-将用户

  • 问题内容: 我首先遇到以下查询的问题是该子句是在:之前执行的: 该列是由 因此,我尝试了带有子查询和其他bs的各种不同可能的解决方案。最后,我在子句中尝试了一些不同的子查询,女巫要求我将表顺序从子句更改为子句。我决定尝试以下方法: 由于某种原因,这似乎可以正确排序, 但是为什么 呢? 这种变化如何使我的查询比以前更正确地排序? 真的吗 还是只是针对我提出的测试用例而做? 问题答案: 因此,我对以下

  • 问题内容: 我想知道如何在订购时通过Softlayer Ppython API指定一个额外的分区以添加到引导驱动器(在本例中为RAID1存储组)中。这样,额外的分区将在重新加载操作系统之类的事务后保留在服务器上。 我假设它会作为一个附加选项添加,类似于下面的示例中的storage_groups(我已编辑了一些信息以使其尽可能通用),但是我不确定如何添加它。 尽管我从SoftLayer找到了这个要点

  • 问题内容: 我正在寻找一种数据结构的Java实现,该实现包含一组元素的集合,为这些元素定义了 部分排序 ,并且允许以某种 拓扑顺序 对这些元素进行迭代(任何可能的排序都可以;最好是稳定的)随着集合内容的变化而排序)。 理想的情况下,将落实一个,或接口,并支持所有的接口上的方法。在指定总排序方面,可以使用实例化集合,并且如果比较的两个元素彼此之间没有排序,则比较器可以引发异常(?)。另外,如果插入的

  • 问题内容: 我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有 从日志中,我可以看到数据库以正确的顺序返回了User对象。 在前端,我有 但是顺序改变了。 我只在返回的列表很大(超过130个用户)时才注意到这一点。 我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。 我做错了什么吗?