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

graylog 的InputBuffer 简单说明

时间:2022-10-08 13:07:58浏览次数:73  
标签:Disruptor 依赖 graylog2 InputBuffer disruptor handlers 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 进行处理
RawMessageEvent.FACTORY,


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,handlers,server,graylog,简单
From: https://blog.51cto.com/rongfengliang/5737212

相关文章

  • graylog ProcessBuffer 简单说明
    graylog在消息进入之后(对应input),选择不同的handler处理之后,会到不同的buffer中对于DirectMessageHandler的会到ProcessBuffer中,对于是否开启了Journalling,处理会不一......
  • graylog MessageInput 简单说明
    input是graylog处理消息的核心,内部对于网络的处理是基于了netty框架,消息的核心基类是MessageInput基类的能力如下图,包含了基本常用的配置,状态,以及input节点信息,同时还包......
  • C#一个简单的解析csv文件的方法
    可以将csv转成具体的类型对象,没有用序列化,需要传入转成函数手动编写类型转换代码,代码比较简单publicclassModel{publicint序号{get;set;}......
  • 力扣599(java&python)- 两个列表的最小索引总和(简单)
    题目:假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐......
  • xm-select简单使用一例
    HTML<divid="admin_ids"class="xm-select-demo"></div><scriptsrc="/Public/js/xm-select.js"></script><script> varadmin_ids=xmSelect.render({ el:'#adm......
  • voltus的IR drop分析(简单流程)
    一:文件准备voltus的环境文件配置1:pgv库配置pgv库分别配置std库;mem库;IP库配置库命令:libgen_stdcell.tclread_lib-lefset_pg_library_mode\ -ground_pins *......
  • 简单入门猜数字游戏
    #include<stdio.h>#include<stdlib.h>#include<time.h>voidmenu(){ printf("**********************************************\n"); printf("*** 1.开始游戏 ......
  • 简单理解slot算法和shadow DOM
    阅读完这篇博客你会有以下收获:slot算法是什么?shadowDOM是什么?vueslot机制与w3cwebcomponent规范的shadowDOM渲染结果有何异同?slot算法Theslottingalgorithmassign......
  • Linux下简单命令
    一、如何解压缩文件1、.tar用tar–xvf解压2、.gz用gzip-d或者gunzip解压3、.tar.gz和.tgz用tar–xzf解压4、.bz2用bzip2-d或者用bunzip2解压5、.tar.bz2......
  • 使用spring security 简单步骤
    1.添加springsecurity依赖,即在配置文件中添加依赖。2.添加springsecurity配置文件,spring-security.xml;3.在web.xml加载springsecurity配置文件及springSecurity......