【问题标题】:Kafka - Message versus Record versus offsetKafka - 消息与记录与偏移量
【发布时间】:2021-02-14 07:19:09
【问题描述】:

我是 Streaming Broker [如 Kafka] 的新手,来自队列消息系统 [如 JMS、Rabbit MQ]。

我从 Kafka 文档中了解到,消息作为记录存储在 Kafka 分区中的偏移量中。消费者从偏移量读取。

消息和记录有什么区别【多条/部分消息是否构成一条记录?】

当消费者从偏移量读取时,消费者是否有可能读取部分消息?消费者是否需要根据某种逻辑将这些部分消息串起来?

1 条消息 = 1 条记录 = 1 个偏移量

编辑1:

之所以提出这个问题,是因为“批量大小”决定了应该将多少字节的消息发布到 borker。假设有 2 条消息,消息 1 = 100 字节,消息 2 = 200 字节,批量大小设置为 150 字节。这是否意味着来自 message1 的 100 个字节和来自 message2 的 50 个字节一次发送到代理?如果是,这两条消息是如何存储在偏移量中的?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    在 Kafka 中,Producermessagesrecords(这两个术语可以互换使用)发送到 Topics .一个topic被划分为一个或多个Partitions,分布在Kafka Cluster中,一般由至少三个Broker组成。

    一条消息/记录被发送到领导分区(由单个代理拥有)并关联到一个偏移量。 Offset 是一个单调递增的数字标识符,用于唯一标识主题/分区内的记录,例如存储在记录分区中的第一条消息的偏移量为 0,依此类推。

    偏移量用于识别消息在主题/分区中的位置以及消费者组的位置。

    出于优化目的,生产者将在每个分区中批处理消息。当达到配置的batch.sizedlinger.ms 时,批次被认为已准备就绪。例如,如果您将batch.size 设置为 200KB,并且您发送两条消息(150KB 和 100KB),它们可能属于同一批次。但是生产者永远不会将单个消息分成块。

    不,消费者无法读取部分消息。

    【讨论】:

    • 消费者协议读取整个消息...消费者应用程序本身可以部分处理消息,如果这样写的话
    • 这说明了。谢谢
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2016-08-02
    • 2022-01-06
    • 2016-02-13
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多