系统运维的过程中,每一个细节都值得我们关注

下图为我们的基本日志处理架构

所有日志由Rsyslog或者Filebeat收集,然后传输给Kafka,Logstash作为Consumer消费Kafka里边的数据,分别写入Elasticsearch和Hadoop,最后使用Kibana输出到web端供相关人员查看,或者是由Spark接手进入更深层次的分析。

在以上整个架构中,核心的几个组件Kafka、Elasticsearch、Hadoop天生支持高可用,唯独Logstash是不支持的,用单个Logstash去处理日志,不仅存在处理瓶颈更重要的是在整个系统中存在单点的问题,如果Logstash宕机则将会导致整个集群的不可用,后果可想而知

如何解决Logstash的单点问题呢?我们可以借助Kafka的Consumer Group来实现

Kafka Consumer Group

为了便于理解,我么先介绍一下Kafka里边几个重要的角色:

Broker:一台kafka服务器就是一个broker,一个kafka集群由多个broker组成,上图中的kafka集群有3台kafka服务器组成,也就是有3个broker,一个broker上可以有多个topic。

Topic:是个逻辑上的概念,用来区分不同的消息类别,类似于数据库中的表,可以将一组相同的数据发送给一个Topic,在日志处理中通常会将不同类型的日志写入不同的Topic,例如nginx日志写入名字为 nginx_log 的topic,tomcat日志写入名字为 tomcat_log 的topic,topic上图中没有标出,我们可以理解为图上的三个partition构成了一个topic

Partition:是kafka数据存储的基本物理单元,同一个Topic的数据可以被存储在一个或多个partition中,例如上图中的一个topic数据被存储在了partition1,partition2,partition3中,通常我们设置一个topic下partition的数量为broker的整数倍,这样一来数据能够均匀分布,二来可以同时利用集群下的所有服务器资源

Producer:生产者,向kafka写数据的服务,例如filebeat

Consumer:消费者,去kafka取数据的服务,例如logstash

Consumer Group:也是个逻辑上的概念,为一组consumer的集合,同一个topic的数据会广播给不同的group,同一个group中只有一个consumer能拿到这个数据

也就是说对于同一个topic, 每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个consumer消费 ,基于这一点我们只需要启动多个logstsh,并将这些logstash分配在同一个组里边就可以实现logstash的高可用了

input { kafka { bootstrap_servers => "10.8.9.2:9092,10.8.9.3:9092,10.8.9.4:9092" topics => ["ops_coffee_cn"] group_id => "groupA" codec => "json" }}

以上为logstash消费kafka集群的配置,其中加入了 group_id 参数, group_id 是一个的字符串,唯一标识一个group,具有相同 group_id 的consumer构成了一个consumer group,这样启动多个logstash进程,只需要保证 group_id 一致就能达到logstash高可用的目的,一个logstash挂掉同一Group内的logstash可以继续消费

除了高可用外同一Group内的多个Logstash可以同时消费kafka内topic的数据,从而提高logstash的处理能力,但需要注意的是消费kafka数据时,每个consumer最多只能使用一个partition,当一个Group内consumer的数量大于partition的数量时, 只有等于partition个数的consumer能同时消费 ,其他的consumer处于等待状态。

例如一个topic下有3个partition,那么在一个有5个consumer的group中只有3个consumer在同时消费topic的数据,而另外两个consumer处于等待状态,所以想要增加logstash的消费性能,可以适当的增加topic的partition数量,但kafka中partition数量过多也会导致kafka集群故障恢复时间过长,消耗更多的文件句柄与客户端内存等问题,也并不是partition配置越多越好,需要在使用中找到一个平衡

kafka partition

kafka中partition数量可以在创建topic时指定:

# bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --create --topic ops_coffee --partitions 3Created topic "ops_coffee".

--partitions:指定分区数,如果不指定默认会使用配置文件中 num.partitions 配置的数量

也可以手动修改partition的数量:

# bin/kafka-topics.sh --alter --zookeeper 127.0.0.1:2181 --partitions 5 --topic ops_coffeeAdding partitions succeeded!

注意partition的数量只能增加不能减少

如果想要知道topic的partition信息,可以通过以下命令查看topic详情:

# bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --describe --topic ops_coffeeTopic:ops_coffee PartitionCount:3 ReplicationFactor:2 Configs: Topic: ops_coffee Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2 Topic: ops_coffee Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3 Topic: ops_coffee Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1

至此对kafka consumer group有了更深入的了解,可以在具体的使用中游刃有余。

end:如果你觉得本文对你有帮助的话,记得关注点赞转发,你的支持就是我更新动力。

kafka tool 查看指定group下topic的堆积数量_ELK架构下利用Kafka Group实现Logstash的高可用...相关推荐

  1. 唯品会、滴滴、沪江架构师,关于微服务粒度、高可用、持续交互的实践分享交流(下)...

    架构师小组交流会:每期选择一个时下最热门的技术话题进行实践经验分享. 本期小组交流会邀请到了沪江黄凯.唯品会郑明华.滴滴赵伟.七牛云肖勤,对微服务粒度.高可用.持续交互展开了交流. 本期接着上期唯品会 ...

  2. 下一个风口-基于数据湖架构下的数据治理

    前言 随着大数据.人工智能.云计算.物联网等数字化技术的普及和广泛应用,传统的数据仓库模式,在快速发展的企业面前已然显的力不从心.数据湖,是可以容纳大量的原始数据的存储库和处理系统,已经成为企业应用大 ...

  3. Kafka(八)----Kafka Tool 2.0.7(最新)版本超详细使用指北

    Kafka Tool 2.0.7版本使用指北 本篇博客要点如下: Kafka Tool 2.0.7下载安装 Kafka Tool 2.0.7参数优化及连接Kafka集群 Kafka Tool 2.0. ...

  4. Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)

    ##1. Kafka整体结构图 Kafka名词解释和工作方式  Producer : 消息生产者,就是向kafka broker发消息的客户端.  Consumer : 消息消费者,向kafka ...

  5. activemq后台管理 看topic消息_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列...

    作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 ...

  6. 内网环境下手动部署kubernetes(v1.26.3)高可用集群

    这篇博客主要是记录了手动部署一个高可用的Kubernetes集群的过程.旨在帮助自己及初学者学习kubernetes,并记录下具体的操作过程和总结的知识点.文中可能存在一些问题或不足之处,仅供参考. ...

  7. 利用Kafka和Cassandra构建实时异常检测实验

    导言 异常检测是一种跨行业的方法,用于发现事件流中的异常事件 - 它适用于物联网传感器,财务欺诈检测,安全性,威胁检测,数字广告欺诈以及许多其他应用程序.此类系统检查流数据以检查异常或不规则,并在检测 ...

  8. 用友云微服务架构下配置文件管理利器:配置中心

    微服务架构是这几年IT领域的一个高频词汇,越来越多的项目和应用正在以微服务的思想进行重构.相比于单体应用和SOA架构,微服务优势也逐渐凸显,被广大架构师和技术人员引入和推崇.当然,单体应用.SOA.微 ...

  9. 大促场景下云通信高可用、稳定性实战

    简介:为了帮助用户更好地了解和使用云通信的产品,秒懂云通信系统课程还在继续中.12月21日的秒懂云通信,阿里云高级技术专家卢彬彬分享了<安全可靠 稳如泰山+揭秘双11背后阿里云通信黑科技> ...

最新文章

  1. 一致性哈希(Consistent Hashing)
  2. 花之吻自己查错误订单的一个小脚本
  3. 收藏 | 使用合成数据集做目标检测
  4. heidsql(mysql)安装教程和mysql修改密码
  5. 2:算法php/go [二分查找 ;二叉树的层序遍历 ;最长无重复子数组]
  6. 【学习笔记】seckill-秒杀项目--(1)搭建项目
  7. 免ROOT卸载手机自带软件详细教程
  8. 使用telnet登陆smtp服务发邮件(带身份验证)
  9. 吉林大学计算机学数A吗,2020考研:没有A+学科的985你还会去吗?
  10. 华为交换机RRPP的基本配置
  11. Java 方法(重载,递归)
  12. 使用插件Bootstrap Fileinput文件上传
  13. JavaScript基本语法:JS运算符
  14. android 系统时间改变颜色吗,安卓手机通知栏时间、日期、通知颜色修改教程
  15. java的各种排序算法的分析及实现
  16. Flutter删除缓存
  17. libxml库之xmlParseMemory和xmlDocDumpFormatMemory函数
  18. 如何提高采购效率?采购询价的标准流程
  19. Android集成百度地图-----显示地图、定位、长按显示地址信息
  20. Navicat Premium 12.1.16.0 安装与激活

热门文章

  1. 长寿的十个秘诀 至少选择一个坚持实施
  2. Ubuntu品牌机批量涌入世界市场,中国不会例外
  3. windows系统下_ffmpeg编译_2011年
  4. springCloud - 第9篇 - 同步配置文件(消息总线方式)
  5. 《 Docker 进阶与实战 》 读书笔记
  6. Linux指令小记(简明实用)
  7. Spring mvc中@RequestMapping 6个基本用法小结
  8. shoot for用法
  9. redis-day1
  10. iOS - Core Animation 核心动画