如何为Kafka制作者选择密钥和偏移量

zbwhf8kr  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(308)

我跟着这里。跟着代码。我提出了两个问题
键和偏移相同吗?
谷歌称,
偏移量:kafka主题通过存储消息的分布式分区集接收消息。每个分区都按顺序维护它接收到的消息,这些消息由偏移量(也称为位置)标识。
对我来说似乎两者都很相似。因为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连接器来从第三方websocketapi获取数据。api为给定的键值发送实时数据流消息。所以我想用这个键作为我的分区键和偏移量。但我得确定我的想法是对的。

2sbarzqh

2sbarzqh1#

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

uyto3xhc

uyto3xhc2#

以下是一些基本区别:
抵消:由Kafka维护,用于跟踪消耗的记录,以避免消耗时记录丢失和重复记录。
键:它是特定于输入事件的,如果不可用,则默认情况下它被称为null,这在使用kafka connect使用默认分区er将记录写入hdfs时非常有用。每条消息可以有一个键,或者许多消息可以有类似的键。

相关问题