gpt4 book ai didi

java - 如何为 Kafka Producer 选择 Key 和 Offset

转载 作者:行者123 更新时间:2023-11-30 06:06:15 24 4
gpt4 key购买 nike

我正在关注here .同时遵循代码。我想出了两个问题

  1. Key 和 offset 是否相同?

根据谷歌的说法,

Offset: A Kafka topic receives messages across a distributed set of partitions where they are stored. Each partition maintains the messages it has received in a sequential order where they are identified by an offset, also known as a position.

对我来说两者似乎非常相似。由于offset在分区中维护唯一的消息:生产者根据记录的键将记录发送到分区

  • 为制作人选择基调/偏移的最佳方式是什么?
  • 对于我上面提供的示例,他们选择了时间戳作为键和偏移量。这总是最好的建议吗?

     class IRCMessageListener extends IRCEventAdapter {
    @Override
    public void onPrivmsg(String channel, IRCUser u, String msg) {
    IRCMessage event = new IRCMessage(channel, u, msg);
    //FIXME kafka round robin default partitioner seems to always publish to partition 0 only (?)
    long ts = event.getInt64("timestamp");
    Map<String, ?> srcOffset = Collections.singletonMap(TIMESTAMP_FIELD, ts);
    Map<String, ?> srcPartition = Collections.singletonMap(CHANNEL_FIELD, channel);
    SourceRecord record = new SourceRecord(srcPartition, srcOffset, topic, KEY_SCHEMA, ts, IRCMessage.SCHEMA, event);
    queue.offer(record);
    }

    因为我实际上正在尝试创建一个自定义 Kafka 连接器来从第 3 方 WebSocket API 获取数据。 API 发送给定 Key 值的实时数据流消息。所以我想到将该 Key 用作我的 PartitionKey 以及 Offset。但需要确保我的想法是正确的。

    最佳答案

    Key 是一个可选的元数据,可以与 Kafka 消息一起发送,默认情况下,它用于将消息路由到特定分区。例如。如果您要向具有 p 个分区的主题 mytopic 发送 key 为 k 的消息 m,然后 m 转到 mytopic 中的分区 Hash(k) % p。它与分区的偏移量没有任何关系。消费者使用偏移量来跟踪分区中最后读取消息的位置。在您的情况下,如果时间戳是相当随机分布的,那么就可以了,否则您在使用它作为键时可能会导致分区不平衡。

    关于java - 如何为 Kafka Producer 选择 Key 和 Offset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51245962/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com