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

Kafka主题分区

曾嘉福
2023-03-14

Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。

共有2个答案

穆建华
2023-03-14

是的,Kafka偏移量从0开始,以整个记录的字节长度结束,然后下一条记录从那里开始拾取偏移量由于Kafka是分布式的,因此我们无法保证消费者将以有序的方式获取数据。

路和悌
2023-03-14

是和否。

当您开始一个新主题时,偏移量从零开始。根据您使用的Kafka版本,偏移量是

    < li >逻辑–逐消息递增(从0 . 8 . 0:https://issues.apache.org/jira/browse/KAFKA-506开始)–或 < li >物理–即,偏移量按每个消息的字节数增加。

此外,通过可配置的条件清除旧的日志条目:

  • 保留时间:例如,仅保留上周的消息
  • 保留大小:例如,使用最大10GB的存储空间;删除无法再存储的旧消息
  • 日志压缩(从 0.8.1 开始):仅保留每个键的最新值(请参阅 https://cwiki.apache.org/confluence/display/KAFKA/Log 压缩)

因此,如果旧消息被删除,第一个偏移量可能不会为零。此外,如果您打开日志压缩,可能会丢失一些偏移量。

在任何情况下,您都可以安全地寻找任何偏移量,因为Kafka可以确定偏移量是否有效。对于无效偏移量,会自动前进到下一个有效偏移量。因此,如果您寻求偏移量为零,您将始终获得存储的最旧消息。

 类似资料:
  • 简单问题: 假设我有一个具有3个分区的主题:Topic:StateEvents P1、P2和P3。 让我们假设生产者生成20条消息: 1, 2, 3, ..........20 我的问题是: 当制作人生成这些消息时: 1)每个消息将只在且仅在1个分区?也就是说,1在P1,2在P2,3在P3,然后4在P1,5在P2,6在P3,以此类推? 2)如果#1为真,当消费者订阅时,它将订阅所有分区,以便获得所

  • 通过Kafka文档和各种其他资源,我了解到Kafka中的消息被组织成主题。此外,主题可以分解为多个分区,每个分区可以托管在不同的服务器上。这提供了冗余和可伸缩性。 我不确定这里的“破碎”这个词是什么意思。这是否意味着,如果添加到主题的消息是,例如“1 2 3 4 5 6 7”,那么在将其分解为分区后,我们将有一个分区仅包含整个主题的子部分。就像一个分区有“1 2 3”,而另一个分区有“4 5 6”

  • 我开始学习Kafka用于企业解决方案。 在我阅读的过程中,我脑海中浮现出一些问题: > 当一个生产者正在生成一个消息--它会指定它想要将消息发送到的主题,是这样吗?它关心分区吗? 当订阅服务器运行时-它是否指定其组id,以便它可以是同一主题的使用者集群的一部分,或者是该组使用者感兴趣的几个主题的一部分? 每个消费者组在代理上有一个对应的分区还是每个消费者都有一个? 分区是由代理创建的,因此不是消费

  • 我找不到任何可以添加到Kafka的与配置相关的更改

  • 假设我有一个名为“MyTopic”的主题,它有3个分区P0、P1和P2。这些分区中的每一个都有一个leader,并且本主题的数据(消息)分布在这些分区中。 1.Producer将始终根据代理上的负载以循环方式写到分区的领导者。对吗? 2.制作人如何认识隔断的首领?

  • 我见过,但对于我的(简单的)用例来说,它似乎有些过头了。 我也知道,但我不想仅仅为此编写和维护代码。 我的问题是:有没有一种方法可以用kafka原生工具实现这个主题调度,而不用自己写一个Kafka-Consumer/Producer?