Kafka - 消息与记录与偏移量

doc*_*p09 5 apache-kafka apache-kafka-streams

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

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

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

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

或者

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

编辑1:

之所以提出这个问题,是因为“批量大小”决定了应该向 borker 发布多少字节的消息。假设有 2 条消息,其中 message1 = 100 字节,message2 = 200 字节,batchsize 设置为 150 字节。这是否意味着 message1 中的 100 字节和 message2 中的 50 字节会立即发送到代理?如果是的话,这2条消息是如何存储在offset中的?

fhu*_*ois 7

在 Kafka 中,生产者将消息记录(这两个术语可以互换使用)发送到Topics。一个Topic被划分为一个或多个Partition,分布在Kafka Cluster中,一般至少由3个Broker组成。

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

偏移量既用于标识消息在主题/分区中的位置,也用于标识消费者组的位置。

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

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