首页 > 其他分享 >graylog 的InputBuffer 简单说明

graylog 的InputBuffer 简单说明

时间:2022-10-03 13:55:41浏览次数:73  
标签:Disruptor 依赖 graylog2 InputBuffer disruptor server graylog 简单

InputBuffer 是graylog 实际处理日志的部分,内部处理基于了Disruptor,同时还依赖了Journalling 能力
内部实际处理是依赖LocalKafka的(而且是推荐的)

InputBuffer 处理的几个模式

目前主要包含了3大类 DirectMessageHandler,RawMessageEncoderHandler,JournallingMessageHandler
构造(InputBufferImpl 构造函数)

 
 final Disruptor<RawMessageEvent> disruptor = new Disruptor<>(
                RawMessageEvent.FACTORY,
                configuration.getInputBufferRingSize(),
                threadFactory(metricRegistry),
                ProducerType.MULTI,
                configuration.getInputBufferWaitStrategy());
        disruptor.setDefaultExceptionHandler(new LoggingExceptionHandler(LOG));
        // 处理器核心是disruptor 的workpool 实现负载均衡能力
        final int numberOfHandlers = configuration.getInputbufferProcessors();
        if (configuration.isMessageJournalEnabled()) {
            LOG.info("Message journal is enabled.");
 
            final RawMessageEncoderHandler[] handlers = new RawMessageEncoderHandler[numberOfHandlers];
            for (int i = 0; i < numberOfHandlers; i++) {
                handlers[i] = rawMessageEncoderHandlerProvider.get();
            }
            disruptor.handleEventsWithWorkerPool(handlers).then(spoolingMessageHandlerProvider.get());
        } else {
            LOG.info("Message journal is disabled.");
            final DirectMessageHandler[] handlers = new DirectMessageHandler[numberOfHandlers];
            for (int i = 0; i < numberOfHandlers; i++) {
                handlers[i] = directMessageHandlerProvider.get();
            }
            disruptor.handleEventsWithWorkerPool(handlers);
        }
 
        ringBuffer = disruptor.start();

JournallingMessageHandler 依赖MessageQueueWriter 能力,核心实现是onEvent 方法,调用MessageQueueWriter 的write
同时也会依赖Filter ,进行过滤处理
DirectMessageHandler 依赖ProcessBuffer ,具体处理后边会介绍 ProcessBuffer 也依赖Disruptor 进行处理

insert 处理

通过MessageInput 我们可以知道MessageInput核心是依赖的是InputBuffer 的insert 方法,此处依赖了Disruptor
RingBuffer 的publishEvent 方法,具体消息处理就需要依赖上边的MessageHandler 了

说明

graylog 的InputBuffer 比较依赖Disruptor 进行数据处理,毕竟Disruptor 性能是很不错的,好多高性能框架都依赖这个
进行消息处理

参考资料

https://github.com/Graylog2/graylog2-server/blob/626be1f0d80506705b5ba41fbea33c2ec0164bc0/graylog2-server/src/main/java/org/graylog2/shared/buffers/JournallingMessageHandler.java
https://github.com/Graylog2/graylog2-server/blob/626be1f0d80506705b5ba41fbea33c2ec0164bc0/graylog2-server/src/main/java/org/graylog2/shared/buffers/InputBufferImpl.java
https://github.com/Graylog2/graylog2-server/blob/626be1f0d80506705b5ba41fbea33c2ec0164bc0/graylog2-server/src/main/java/org/graylog2/shared/buffers/ProcessBuffer.java

标签:Disruptor,依赖,graylog2,InputBuffer,disruptor,server,graylog,简单
From: https://www.cnblogs.com/rongfengliang/p/16750431.html

相关文章

  • graylog MessageInput 简单说明
    input是graylog处理消息的核心,内部对于网络的处理是基于了netty框架,消息的核心基类是MessageInput基类的能力如下图,包含了基本常用的配置,状态,以及input节点信息,同时......
  • kafka是啥?虽然很难学,但是实验入门很简单
    文章目录​​kafka概述​​​​kafka快速入门​​​​本地搭建伪分布式kafka集群​​​​使用docker部署kafka​​​​更深入的学习(待更)​​​​学习链接​​kafka概述Kaf......
  • Shiro-01-简单实例
    文章目录​​1.Shiro介绍​​​​2.Shiro与SpringSecurity的对比​​​​3.基本功能​​​​4.Shiro原理​​​​5.Shiro的shiro.ini​​​​6.简单实例​​​​7.身......
  • 程序员的表白原来也如此简单 网友表示很羡慕
    ......
  • 第一季:10简单的谈一下SpringMVC的工作流程【Java面试题】
    第一季:10简单的谈一下SpringMVC的工作流程【Java面试题】​​前言​​​​推荐​​​​第一季:10简单的谈一下SpringMVC的工作流程​​​​题目​​​​分析​​​​最后​​......
  • graylog jprofiler docker 镜像
    主要是添加jprifler方便学习参考dockerfile很简单,添加文件就行了,具体jprofiler官方下载解压就行了FROMgraylog/graylog:4.3COPYjprofiler13.0.3//op......
  • Prometheus 简单理解
    Prometheus是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus内置了一个强大的数据查询语言PromQL。通过PromQL可以实现对监控数据的查......
  • graylog rest servcie 启动&集成说明
    参考处理模块定义Graylog2ModuleprotectedvoidaddSystemRestResource(Class<?>restResourceClass){systemRestResourceBinder().addBinding().toI......
  • numpy简单使用
    1.安装以及测试简介NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:一个强大的N维数组对象ndarray广播功能函数整合C/C++/Fortran代码的工具线性代数、傅里叶......
  • Rsync的简单使用
    Rsync的简单使用需求一个运行很久的系统里面可能包含了非常多的垃圾文件.但是又不可能随便删除,很多垃圾可能有某些奇葩的用法.有时候新建一个应用复制文件的话比较浪费......