graylog 的InputBuffer 简单说明

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

posted on   荣锋亮  阅读(82)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2020-10-03 drill 学习 三 drill 参考架构介绍一
2017-10-03 CoreDNS kubernetes 安装使用

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示