为了账号安全,请及时绑定邮箱和手机立即绑定

如何为Kafka生产者选择键和偏移

如何为Kafka生产者选择键和偏移

开满天机 2021-05-05 13:45:24
我在这里。在遵循代码的同时。我想出了两个问题密钥和偏移量是否相同?根据Google的说法,偏移量:一个Kafka主题会在存储它们的一组分布式分区中接收消息。每个分区都按顺序维护已收到的消息,其中它们由偏移量(也称为位置)标识。似乎两者对我来说都非常相似。由于偏移量在分区中保持唯一的消息:生产者根据记录的键将记录发送到分区为生产者选择键/偏移的最佳方法是什么?对于我上面提供的示例,他们选择了时间戳作为Key和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连接器,以从3rd Party WebSocket API获取数据。API发送给定键值的实时数据流消息。所以我想到了将那个Key用作我的PartitionKey以及Offset。但是需要确保我对自己的想法是正确的。
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

密钥是可选的元数据,可以与Kafka消息一起发送,默认情况下,它用于将消息路由到特定分区。例如,如果你发送消息与键ķ,到一个主题mytopicp分区,然后进入到分区哈希(ķ)%pmytopic。它与分区的偏移量没有任何关系。使用者使用偏移量来跟踪分区中最后读取的消息的位置。在您的情况下,如果时间戳是相当随机分布的,那很好,否则在将其用作键时可能会导致分区不平衡。


查看完整回答
反对 回复 2021-05-19
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信