首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kafka-消费缓慢的情况下的最佳实践

Kafka-消费缓慢的情况下的最佳实践
EN

Stack Overflow用户
提问于 2020-06-04 13:27:35
回答 1查看 396关注 0票数 0

我有一个用例,在这个用例中,我有3个Kafka消费者在写一个主题,每个消费者中的消息需要按顺序处理。以防万一,如果其中一个消费者存在滞后,则需要更早处理的消息将被丢弃(写入条件)。那么,有没有办法可以维持这些消息的顺序呢?

EN

回答 1

Stack Overflow用户

发布于 2020-06-04 14:22:25

消息始终在Kafka分区中排序。通常,属于某个关键字的所有消息都位于某个分区中(通过分区逻辑)。

我有一个用例,在这个用例中,我有3个Kafka用户在写一个主题

我想,你的意思是你有3个消费者从一个主题中阅读

这里有两种情况:

  1. 每个使用者获取主题中的所有消息。
  2. 每个使用者仅获取主题中消息(分区)的一部分。

案例#1中的

您可以有3个消费者,每个消费者都有不同的group.id,这样每个消费者都可以使用所有的消息集。在这里,速度较慢的消费者不会减慢其他消费者的速度。因为每个使用者通常在其自己的线程或进程中运行。

案例2中的

您可以有3个具有相同group.id的使用者,这样每个使用者将获得其自己的分区份额。一个消费者消费的消息不会被另一个消费者消费。在这里,速度较慢的消费者也不会减慢其他消费者的速度。因为每个使用者将只使用它自己的一组分区。

在这种情况下,如果其中一个消费者存在滞后,则需要更早处理的消息将被丢弃(写入条件)

在Kafka中没有隐含的丢弃,你必须在轮询消息后自己丢弃它。

为了检查滞后,我认为,你可以从consumer.endOffsets()consumer.position()开始,不同之处应该会给你带来滞后。根据延迟的不同,您可以选择丢弃邮件。

代码语言:javascript
运行
复制
consumer.assignment().forEach( topicPartition -> {
      long currentPos = consumer.position(topicPartition);
      long endOfPartition = consumer.endOffsets(Collections.singletonList(topicPartition)).get(topicPartition);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62187416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档