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

Netty 请求超时

Netty 请求超时

慕少森 2021-06-09 14:13:42
我正在尝试编写一个 HTTP 服务,该服务将从 HTTP 获取数据并使用 Netty 将其放入 Kafka。我需要在 m5.large EC2 实例上处理 20K RPS,这似乎非常可行。代码很简单:Server.javapublic class Server {    public static void main(final String[] args) throws Exception {        final EventLoopGroup bossGroup = new EpollEventLoopGroup();        final EventLoopGroup workerGroup = new EpollEventLoopGroup();        try {            final ServerBootstrap bootstrap = new ServerBootstrap();            bootstrap                .group(bossGroup, workerGroup)                .channel(EpollServerSocketChannel.class)                .childHandler(new RequestChannelInitializer(createProducer()))                .childOption(ChannelOption.SO_KEEPALIVE, true);            bootstrap.bind(PORT).sync().channel().closeFuture().sync();        } finally {            bossGroup.shutdownGracefully();            workerGroup.shutdownGracefully();        }    }    private static Producer<String, ByteBuffer> createProducer() {        final Properties properties = new Properties();        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KAFKA_HOST);        properties.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaBidRequestProducer");        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ByteBufferSerializer.class.getName());        properties.put(ProducerConfig.RETRIES_CONFIG, 0);    }}代码取自官方文档。但是,有时我会Request 'Post BidRequest' failed: j.u.c.TimeoutException: Request timeout after 60000 ms在负载测试中遇到异常。据我了解,这意味着在我的负载测试实例和服务实例之间建立了连接,但完成时间超过 60 秒。这个简单程序的哪一部分可以阻塞这么长时间?我已经调整了 Kafka 制作人:减少了它的超时时间。我知道这send可能会阻塞,所以我增加了发送缓冲区,但没有帮助。我也增加ulimits了服务用户。我在 OpenJDK 版本 1.8.0_171 上运行并securerandom.source设置为file:/dev/urandom,因此randomUUID不应阻止对 的调用。
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

你说得对,里面没有什么东西可以阻挡。发送到 Kafka 的调用是异步的。我查看了您的代码,从我所看到的一切看起来都不错。

我要检查的几件事:

  • 确保 AWS 中的安全组定义允许 Kafka 服务器和应用程序与 Zookeeper 通信。如果这是一个测试/POC,您应该只允许所有三个实例/集群之间的所有流量。60 秒超时让我怀疑网络超时,这可能意味着某些服务无法访问。

  • 您是否尝试过更简单的测试,尝试在没有 Netty 依赖的情况下对 Kafka 进行生产?也许这有助于缩小问题的范围。


查看完整回答
反对 回复 2021-06-30
  • 1 回答
  • 0 关注
  • 297 浏览

添加回答

举报

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