filebeat折腾
最近一段时间都在整理知识体系,还没整理完备,然后就被拉着做新的消息队列的接入,原来使用kafka,切到了rabbitmq。切换还算顺利,同时又有同事想做日志系统的想法。我突然灵光一线,为什么不能filebeat + 消息队列实现集中式日志管理呢?
调研
- kafka 适合日志型 队列服务,采取订阅式的消息拉取
- rabbitmq 功能能丰富,适合业务逻辑使用,不建议用作日志收集
功能 | kafka | Rabbitmq |
---|---|---|
优先级队列 | 不支持 | 支持,建议优先级大小设置在0-10之间 |
延迟队列 | 不支持 | 支持 |
死信队列 | 不支持 | 支持(死信队列,是指一些无法正常消费的消息,为了不影响正常的队列运行,将这些消息添加到死信队列,通过处理死信队列处理异常消息) |
重试队列 | 不支持 | 不支持,RabbitMQ中可以参考延迟队列实现重试队列,二次封装比较简单。如果要在Kafka中实现延迟队列功能,相对比较复杂 |
消费模式 | 拉模式(订阅) | 推模式+拉模式广播消费支持。Kafka对于广播消费的支持相对而言更加正统支持,但力度较Kafka弱消息 |
回溯 | 支持。Kafka支持按照Offset和timestamp两种维度进行消息回溯不支持。 | RabbitMQ中消息一旦被确认消费就会被标记删除 |
消息堆积 | 支持 | 支持。一般情况下,内存堆积达到特定阀值时会影响其性能,但这不是绝对的。如果考虑吞吐因素,Kafka的堆积效率比RabbitMQ总体上要高很多 |
持久化 | 支持 | 支持 |
消息追踪 | 不支持。消息追踪可以通过外部系统来支持,但是支持力度没有内置细腻支持。 | RabbitMQ中可以采用Firehose或者rabbitmq_tracing插件实现。不过开启rabbitmq_tracing插件会大幅影响性能,不建议生产环境开启,反倒是可以使用Firehose与外部链路系统结合提供高细腻度的消息追踪支持 |
消息过滤 | 客户端级别支持 | 不支持,但是二次封装一下也非常简单 |
多租户 | 不支持 | 支持 |
多协议 | 支持只支持定义协议,目前几个主流版本见存在兼容性问题 | RabbitMQ本身就是AMQP协议的实现,同时支持MQTT、STOMP等协议。 |
跨语言 | 支持采用Scala和java编写,支持多种语言的客户端 | 采用Erlang编写,支持多种语言的客户端 |
流量控制 | 支持client和user级别,通过主动设置可将流控作用域生产者或消费者 | RabbitMQ的流控基于Credit-Based的算法,是内部被动触发的保护机制,作用于生产者层面 |
消息顺序性 | 支持单分区级别的顺序性 | 顺序的条件比较苛刻,需要单线程发送,单线程消费并且不采用延迟队列,优先队列等一些高级功能,从某种意义上来说不算支持顺序性 |
安全支持 | (TLS/SSL、SASL)身份认证和(读写)权限控制 | 与Kafka相似 |
幂等性 | 支持单个生产者单分区单回话的幂等性(单次或多次执行后是一样的) | 不支持 |
事务性消息 | 支持 | 支持 |
- filebeats 支持kafka 不支持 rabbitmq
折腾filebeats
- Go 的kafka 已经折腾过了,为了给自己练练手准备让filebeats支持rabbitmq 。
- 找到了https://github.com/sidleal/mqttout
- 自己尝试使用发现新版filebeat的接口有些改变,而且他用的链接rabbitmq的底层库也比较老,唯有自己动手
- 在原有的基础上做了改动https://github.com/xiangdong1987/mqttout感觉能用,用的到大家随便用。
总结
学习的过程就是想到就去实践,不懂得就去学习,最后达成目标,估计这就是一个大龄程序员还能继续码代码的动力了。继续整理知识体系去了。留下一个思路,用kafka+filebeats实现模调系统以及日志系统。或者听听各位大神的意见。