java - 当单个应用程序实例中的基础设施问题时,Kafka 分区被阻塞
问题描述
在使用具有许多 POD 的 Kubernetes 运行微服务时,我遇到了一些微服务的问题。我使用手动提交策略,所以我应该确认或不确认每条消息。应用程序的所有实例都属于同一个 kafka 组。并且主题在 POD 之间至少有 20 个分区。使用消息时,侦听器调用外部组件(例如 WebClient 或 RestTemplate 的 rest API,或不同主题的 kafka 生产者)。Kafka 消费者如下所示:
@KafkaListener(topics = "topic")
@Trace
public void listen(@Payload Object message, , Acknowledgment acknowledgment)) {
try {
api.call(message);
acknowledgment.acknowledge();
} catch (InfraException e) {
acknowledgment.nack(1000);
}
但有时这个外部组件存在基础设施问题并且不可用。当由于某种原因单个 POD 存在连接问题时,通常会发生此问题。由于消息未确认,他继续被消费,有什么好处。但问题是消息会继续发送到应用程序的同一个有问题的实例,并且永远不会重定向到另一个“健康”消费者。由于消费者能够从 kafka 获取消息并发送心跳,因此它永远不会被认为是有问题的即使在重新平衡之后,消费者也可以使用 kafka。我们可以在配置中采取一些策略或做些什么来解决这个问题或避免分区被阻塞?
感谢您迄今为止的关注。
解决方案
推荐阅读
- java - 想要将 Activity 更改为 Fragment
- php - 如何将 laravel 上的 /register 重新路由到我的 SPA 应用程序?
- python - Python - 如何添加新列并向每个文件添加值,然后合并为一个
- twitter-bootstrap - Bootstrap:如何在固定高度的卡片底部放置 100% 宽度的元素?
- mysql - 在 Nestjs 中注入 Tree Typeorm 存储库
- salesforce-communities - 从电话号码的区号获取州代码和国家代码
- android - Facebook Account Kit 与 ProGuard 冲突
- angular - 从角度 7 的控制器访问 ng-template 内部的 ngForm
- python - SQLAlchemy:__tablename__ 作为变量
- ios - UICollectionView 中的项目数