小编Era*_*rel的帖子

监视Netty事件循环队列的大小

我们已经实现了对Netty事件循环队列的监控,以便了解我们的一些Netty模块的问题.监视器使用的io.netty.util.concurrent.SingleThreadEventExecutor#pendingTasks方法适用于大多数模块,但对于每秒处理几千个HTTP请求的模块,它似乎挂起或非常慢.我现在意识到文档严格规定这可能是一个问题,我觉得很蹩脚......所以我正在寻找另一种方法来实现这个监视器.

你可以在这里看到旧代码:https: //github.com/outbrain/ob1k/blob/6364187b30cab5b79d64835131d9168c754f3c09/ob1k-core/src/main/java/com/outbrain/ob1k/common/metrics/NettyQueuesGaugeBuilder.java

  public static void registerQueueGauges(final MetricFactory factory, final EventLoopGroup elg, final String componentName) {

    int index = 0;
    for (final EventExecutor eventExecutor : elg) {
      if (eventExecutor instanceof SingleThreadEventExecutor) {
        final SingleThreadEventExecutor singleExecutor = (SingleThreadEventExecutor) eventExecutor;
        factory.registerGauge("EventLoopGroup-" + componentName, "EventLoop-" + index, new Gauge<Integer>() {
          @Override
          public Integer getValue() {
            return singleExecutor.pendingTasks();
          }
        });

        index++;
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有更好的方法来监控队列大小?

这可能是一个非常有用的指标,因为它可用于理解延迟,并且在某些情况下也可用于施加背压.

java monitoring event-loop netty

14
推荐指数
1
解决办法
1757
查看次数

AsyncHttpClient是否知道要为所有HTTP请求分配多少线程

我正在为大负载(~1M HTTP请求)评估AsyncHttpClient.对于每个请求,我想使用AsyncCompletionHandler调用一个回调,它只会将结果插入阻塞队列

我的问题是:如果我在紧密循环中发送异步请求,AsyncHttpClient将使用多少个线程?(我知道你可以设置最大值,但显然你冒了丢失请求的风险,我在这里看到)

我目前正在使用这些版本的Netty实现:

  • async-http-client v1.9.33
  • netty v3.10.5.Final

如果在以后的版本中有任何优化,我不介意使用其他版本

编辑:

我读到Netty使用reactor模式来响应HTTP响应,这意味着它分配了很少的线程来充当选择器.这也意味着分配的线程数不会随着请求量的增加而增加.但是,这与设置最大连接数的需要相矛盾.

谁能解释我错过的东西?

提前致谢

java multithreading http netty asynchttpclient

8
推荐指数
2
解决办法
4623
查看次数

Spring-Batch用于大规模的夜间/小时Hive/MySQL数据处理

我正在考虑更换一堆Python ETL脚本,这些脚本执行大量数据的夜间/小时数据汇总和统计数据收集.

我想要实现的是

  • 稳健性 - 应该自动重启失败的作业/步骤.在某些情况下,我想执行恢复步骤.
  • 该框架必须能够从崩溃中恢复.我想这里需要一些持久性.
  • 监控 - 我需要能够监控工作/步骤的进度,并且最好查看有关性能的历史和统计数据.
  • 可追溯性 - 我必须能够理解执行的状态
  • 手动干预 - 很高兴能够从API/UI /命令行启动/停止/暂停作业.
  • 简单 - 当我介绍替换时,我不希望我的同事生气.有一个简单易懂的API是必需的.

当前脚本执行以下操作:

  • 从许多计算机收集文本日志,并将它们推送到Hadoop DFS.我们将来可能会将Flume用于此步骤(请参阅http://www.cloudera.com/blog/2010/07/whats-new-in-cdh3b2-flume/).
  • 对数据执行Hive摘要查询,并插入(覆盖)到新的Hive表/分区.
  • 将新摘要数据提取到文件中,然后加载(合并)到MySql表中.这是以后在线报告所需的数据.
  • 对新添加的MySql数据(来自MySql表)执行其他连接,并更新数据.

我的想法是用spring-batch替换脚本.我也研究过Scriptella,但我认为这种情况太简单了.

因为我在Spring-Batch上看到了一些不好的共鸣(大多是老帖子),我希望在这里得到一些输入.我还没有看到很多关于spring-batch和Hive集成,这很麻烦.

mysql hadoop etl hive spring-batch

7
推荐指数
1
解决办法
5401
查看次数

用于吞吐量的HTTP客户端 - Netty与Apache HttpAsyncClient

我有兴趣从一台机器执行大约50个HTTP请求/秒.我不太关心延迟,但我确实关心吞吐量.

我正在尝试决定是使用Apache HttpAsyncClient还是使用Netty.有人能否解释一下每个人对我的问题的好处?

我已经找到了这个比较,但我希望能更详细地解释哪一个更好,哪个用例更好.此外,比较是否意味着使用具有200个线程的同步apache HTTP客户端比其他选项更好?不是200个线程有点太多(假设我使用的是具有4个内核的普通计算机,每个内核2个线程和12GB内存)?

提前致谢

java multithreading performance-testing netty apache-httpasyncclient

2
推荐指数
1
解决办法
7275
查看次数