Kafka消息组合

Kafka message composition

kafka 消息有:

key, value, compression type, headers(key-value pairs,optional), partition+offset, timestamp

密钥被散列到分区以找到哪个分区生产者将写入。

那为什么我们需要分区作为消息的一部分。

此外,生产者如何知道偏移量,因为偏移量看起来更像是 kafka 服务器的 属性?并且它不会导致服务器和生产者之间的耦合吗?

如果多个生产者正在写入一个主题,它会如何工作,因为他们发送的偏移量可能会发生冲突?

why do we need partition as part of message.

客户端是否设置记录分区是可选的。 协议 中仍然需要分区,因为密钥未经过哈希处理 server-side,然后重新路由。

how does producer know the offset as offset seems more like a property of kafka server?

生产者需要回调来获取 OffsetMetadata,但不知道何时发送批次

And doesn't it cause coupling between server and producer?

是吗?它是 Kafka 协议。消费者也与服务器“耦合”,因为它必须了解如何与之通信。

multiple producers are writing to a topic, as offset send by them may clash?

如果 max.inflight.connections 大于 1 并且启用了退役,那么是的,批次可能会重新排列,但发送请求最初是有序的,并且客户端不设置记录偏移量,代理会设置。