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

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

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

a98c9a6c436f12d9612a72b347c05c33.png

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

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

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

Kafka Consumer Group

578a360030ea8f6971030eb99d2baccf.png

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

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

79f5ac2806956fd9893f3262993a4444.png

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

33860718ecac4123d1b1aa3ab57b699e.png

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处于等待状态。

2813b8941185dc722080186e8f4edd06.png

例如一个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:如果你觉得本文对你有帮助的话,记得关注点赞转发,你的支持就是我更新动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery flot pie画饼图

具体效果如下&#xff1a; 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> 5 <title>Insert title here</title> 6 <script language"javas…

mysql fetch rows_差异mysql_fetch_array()和mysql_fetch_rows()函数_mysql

区别mysql_fetch_array()和mysql_fetch_rows()函数form:http://www.uphtm.com/php/254.html如果我们不仔细看会发现象mysql_fetch_array()和mysql_fetch_rows()函数没有什么区别&#xff0c;但是细细的看你会发现它们区别还是蛮大了&#xff0c;如果各位对于此函数的区别不了解…

解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么

本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一、模式概述 从设计模式的类型上来说&#xff0c;简单工厂模式是属于创建型模式&#xff0c;又叫做静态工厂方法&#xff08;Static Factory Method&#xff09;模式&#xff0c;但不属…

Memcached常用操作

memcached是一个高性能的、分布式内存对象缓存系统&#xff0c;应用广泛。 通过缓存数据库查询结果&#xff0c;减少数据库访问次数&#xff0c;以提高动态Web应用的速度、 提高可扩展性。 它可以应对任意多个连接&#xff0c;使用非阻塞的网络IO。由于它的工作机制是在内存中开…

android自定义金额输入键盘_Android 自定义控件 - 仿支付宝数字键盘

原标题&#xff1a;Android 自定义控件 - 仿支付宝数字键盘简介在一些带有支付功能的 App 中&#xff0c;输入的密码一般只能是纯数字&#xff0c;虽然我们可以指定 EditText 输入框只能输入数字&#xff0c;但是为了提供用户的使用体验&#xff0c;我们往往更倾向于使用自定义…

tfs文件系统之NS配置管理

NameServer简称NS 充当着客户与DS的交互桥梁 1.NS配置文件修改&#xff1a; [public] #log file size default 1GB log_size1073741824 #log file num default 64 log_num 64 #log file level default debug log_leveldebug #main queue size default 10240 task_max_queue_…

插件式架构设计实践:插件式系统架构设计简介

本系列博文将使用微软RIA技术解决方案Silverlight以及扩展性管理框架Managed Extensibility Framework&#xff08;MEF&#xff09;&#xff0c;以插件式架构设计为导线&#xff0c;分享本人在从事基于微软Silverlight技术构建的RIA系统中实施插件式系统架构设计的相关技术和经…

五种方式让你在java中读取properties文件内容不再是难题

2019独角兽企业重金招聘Python工程师标准>>> 方式1.通过context:property-placeholder加载配置文件jdbc.properties中的内容 <context:property-placeholder location"classpath:jdbc.properties" ignore-unresolvable"true"/> 上面的配置…

hive metastore mysql_Hive MetaStore的结构

本篇主要是介绍Hive在MySQL中存储的源数据的表结构。Hive MetaStore 数据库表结构图test.pngTBLS记录数据表的信息字段解释TBL_ID在hive中创建表的时候自动生成的一个id&#xff0c;用来表示&#xff0c;主键CREATE_TIME创建的数据表的时间&#xff0c;使用的是时间戳DBS_ID这个…

更改阿里云域名解析台里某个域名绑定的IP之后不能解析到新IP

1.由于要撤销一组负载均衡&#xff0c;所以需要更改阿里云域名解析台里某个域名由原来绑定的负载均衡公网IP换到服务器公网IP 2.在服务器上nginx指定了域名访问&#xff0c;开启nginx服务 3.暂时关闭该组负载均衡服务 4.实现通过服务器IP可以访问项目&#xff0c;域名访问不了 …

秒懂数据类型的真谛—Python基础前传(4)

一切编程语言都是人设计的&#xff0c;既然是人设计的&#xff0c;那么设计各种功能的时候就一定会有它的道理&#xff0c;那么设计数据类型的用意是什么呢&#xff1f; (一) 基本数据类型 基本数据类型&#xff1a; 数字 int字符串 str布尔值 bool列表 list元组 tuple字典 dic…

wordpress配置SMTP服务发送邮件

使用SMTP服务发送邮件&#xff0c;需要使用一个插件&#xff1a;http://wordpress.org/extend/plugins/wp-mail-smtp/ 下载完成以后解压到plugin目录&#xff0c;然后在插件中启用这个插件。 配置SMTP服务 SMTP的选项 发送一封测试邮件吧 >>> 本文转自齐师傅博客园博客…

使用Server 2008新GPO做驱动器映射

在Server 2003的时代&#xff0c;我们为用户做网络驱动器映射(以下就直接称为Map Network Drive&#xff09;, 通常可能有以下的做法. 方法一: 做一个登录脚本&#xff0c;放在DC的netlogon目录&#xff0c;接着在“Active Directory用户和计算机”控制台的用户属性的Logon S…

Linux 内核调试器 调试指南

Linux 内核调试器内幕 KDB 入门指南 Hariprasad Nellitheertha (nhariprain.ibm.com), 软件工程师, IBM简介&#xff1a; 调试内核问题时&#xff0c;能够跟踪内核执行情况并查看其内存和数据结构是非常有用的。Linux 中的内置内核调试器 KDB 提供了这种功能。在本文中您将了解…

学习API HOOK,编写了一个winsock 的封包抓取程序,可免费使用;

开发环境是:windows 2000 delphi 7 监视API&#xff1a;recv,recvfrom,WSARecvEx,send,sendto,accept,bind,closesocket,connect socket 版本&#xff1a;wsock32.dll/*ws2_32.dll(暂时有兼容问题) 目前还不支持修改封包&#xff1b; 当前实现针对某个进程或多个选定进程的通…

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据&#xff0c;算是对MyBatis有一个初步的入门了&#xff0c;今天讲解一下如何使用MyBatis对users表执行CRUD操作。本文中使…

cifs mount 挂载共享目录_安装cifsutils解决linux挂载windows共享文件夹

1、安装mount.cifs软件包yum install cifs-utils -y如果是离线环境&#xff0c;请参考我的另一篇文章https://blog.csdn.net/qq_37119960/article/details/1083313732、开始挂载mount.cifs //192.168.1.110/share /usr/local/winshare -o useradministrator,pass123456参数说明…

JFinal框架

FJinal过滤器(tomcat) 创建java类继承JFinalConfig 会实现六个方法(有一个是拦截器的方法好像是,那个我好像看的跟struts2一样但是又没看懂暂时不写) Controller层的测试方法 Entity实体类 常用方法 查询 增加 删除 修改 转载于:https://www.cnblogs.com/guanzhuang/p/8317949.…

掌握 Linux 调试技术 使用 GDB 调试 Linux 软件

简介&#xff1a; 您可以用各种方法来监控运行着的用户空间程序&#xff1a;可以为其运行调试器并单步调试该程序&#xff0c;添加打印语句&#xff0c;或者添加工具来分析程序。本文描述了几种可以用来调试在 Linux 上运行的程序的方法。我们将回顾四种调试问题的情况&#xf…

集合之二:迭代器

迭代器的简单使用 在遍历容器时&#xff0c;我们可以使用for循环或者是增强for循环&#xff0c;但是不同的集合结构在遍历时&#xff0c;我们要针对集合特点采取不同的方式&#xff0c;比如List是链表&#xff0c;我们可以直接当做数组处理&#xff0c;但Map是Key—Value的形式…