繁体   English   中英

谷歌发布/订阅错误 com.google.cloud.pubsub.v1.StreamingSubscriberConnection

[英]Google pub/sub ERROR com.google.cloud.pubsub.v1.StreamingSubscriberConnection

我有一个托管在 GKE 中的扫雪机 enricher 应用程序使用来自 google pub/sub 订阅的消息并且 enricher 应用程序抛出以下错误。

我每天可以在发布/订阅订阅中看到num_undelivered_messages计数激增(超过 50000)3-4 次,我认为这些错误消息的发生是因为 enricher 应用程序无法从上述订阅中获取消息。

为什么应用程序有时无法连接到发布/订阅订阅?

非常感谢任何帮助。

Apr 12, 2022 12:30:32 PM com.google.cloud.pubsub.v1.StreamingSubscriberConnection$2 onFailure
WARNING: failed to send operations
com.google.api.gax.rpc.UnavailableException: io.grpc.StatusRuntimeException: UNAVAILABLE: 502:Bad Gateway
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:69)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:72)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:60)
at com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97)
at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:68)
at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1050)
at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:30)
at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1176)
at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:969)
at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:760)
at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:545)
at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:515)
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:426)
at io.grpc.internal.ClientCallImpl.access$500(ClientCallImpl.java:66)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:689)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$900(ClientCallImpl.java:577)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:751)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:740)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE: 502:Bad Gateway
at io.grpc.Status.asRuntimeException(Status.java:533)
... 15 more

订阅中消息的累积表明您的订阅者跟不上消息流。

要监控您的订阅者,您可以创建一个包含积压指标的仪表板: num_undelivered_messagesoldest_unacked_message_age (订阅积压中最旧的未确认消息的年龄),按资源汇总所有订阅。

  • 如果oldest_unacked_messagenum_undelivered_messages都在增长,那是因为订阅者跟不上消息量。

    解决方案:添加更多订阅者线程/机器并查找代码中可能阻止确认消息的任何错误。

  • 如果oldest_unacked_message_age稳定增长且积压量稳定且较小,则可能有少量消息无法处理。 这可能是由于消息卡住了。

    解决方案:检查您的应用程序日志以了解是否某些消息导致您的代码崩溃。 违规消息不太可能(但有可能)卡在 Pub/Sub 而不是您的客户端中。

  • 如果oldest_unacked_message_age超过订阅的消息保留期限,则数据丢失的可能性很高; 在这种情况下,最好的选择是将警报设置为在订阅的消息保留期限到期之前触发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM