kafka+zookeeper消息队列

软件包提取码:u3s1
kafka: 起初是做采集日志的,和zookeeper一起才能做消息队列,可持久化。

  • kafka broker(server): 消息中间件处理的节点 一个Kafka节点就是一个broker(server)
  • topic = vhost -类消息 对消息进行分类主题-个类型-个主题topic可以有多个
  • partition = queue消息的载体 partition也可以有多个partition是 一个有序的队列
  • offset 偏移量 对分区的内容进行标识 先进先出不可逆消息的序列号,有了offset这个偏移量就能将数据写入到append.log中保存,两天的时间之后就会被删除,不论消息是否处理成功都会删除
  • produce消息的生产者
  • consumer 消息的消费者 consumer订阅消息的 每条消息只能有一的消费者

Kafka的优点:

  • kafka中append对消息的追加保证消息有先来后到的顺序
  • 理论上写入成功则成功,不会丢失数据,会在物理机上生成一个append.log文件
  • 分布式 容灾
  • 容量大,相对于其他消息列队,kafka的容量取决于硬盘的容量

Kafka分布式

  • leader(工作者)
  • follow(备份)
  • kafka集群的所有节点会去zookeeper上面注册信息 只有主能注册成功 生成临时节点信息,当主宕机从们会再次去注册找到- 个主这里只有leader在 工作从是负责备份的,为了保证高可用所以都会搭建集群。

Zookeeper: 键值对 用来存放meta信息(原始数据,最底层的数据)。还有Watch发现机制

  • broker node registry:broker注册节点,会生成znode的临时节点保存信息
  • broker topic registry:当一个zookeeper启动时会注册自己持有的topic和partition信息
  • consumer and consumer group:主要用来做负载均衡
  • consumer id registry:每个consumer都有唯一的id号,用来标记消费者信息
  • consumer offset tracking:用来跟踪每个concumer消费的最大的offset
  • partition owner registry:用来标记partiton被哪个consumer消费的
主机1 192.168.1.1
主机2 192.168.1.2
主机3 192.168.1.3

搭建zookeeper集群

#主机1
[root@CentOS1 ~]# java -version	#需要java环境
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@CentOS1 ~]# tar zxf zookeeper-3.3.6.tar.gz 
[root@CentOS1 ~]# mv zookeeper-3.3.6 /usr/local/zookeeper
[root@CentOS1 ~]# cd /usr/local/zookeeper/
[root@CentOS1 zookeeper]# cd conf/
[root@CentOS1 conf]# cp zoo_sample.cfg zoo.cfg		#复制默认的配置文件名字必须值zoo.cfg
[root@CentOS1 conf]# vim zoo.cfg 
  2 tickTime=2000	#zookeeper各个节点发送心跳包的时间 毫秒
  5 initLimit=10	#
  8 syncLimit=5
#修改为
 10 dataDir=/usr/local/zookeeper/data	#数据存放位置
#添加以下内容
 11 dataLogDir=/usr/local/zookeeper/datalog	#日志存放位置
 14 server.1=192.168.1.1:2888:3888
 15 server.2=192.168.1.2:2888:3888
 16 server.3=192.168.1.3:2888:3888
[root@CentOS1 conf]# cd /usr/local/zookeeper/
[root@CentOS1 zookeeper]# mkdir data
[root@CentOS1 zookeeper]# mkdir datalog
[root@CentOS1 zookeeper]# cd data
[root@CentOS1 data]# echo "1" > myid
[root@CentOS1 data]# cat myid 
1
[root@CentOS1 data]# scp -r /usr/local/zookeeper/ root@192.168.1.2:/usr/local/zookeeper
[root@CentOS1 data]# scp -r /usr/local/zookeeper/ root@192.168.1.3:/usr/local/zookeeper
#主机2
[root@CentOS2 ~]# echo "2" >/usr/local/zookeeper/data/myid
[root@CentOS2 ~]# cat /usr/local/zookeeper/data/myid 
2
#主机3
[root@Centos3 ~]# echo "3" >/usr/local/zookeeper/data/myid
[root@Centos3 ~]# cat /usr/local/zookeeper/data/myid
3
#三台主机都要启动服务
cd /usr/local/zookeeper/bin/
./zkServer.sh start
#查看zookeeper的状态
#主机1
[root@CentOS1 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower	#第一个follwer
#主机2
[root@CentOS2 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader	#只能有一个leader并且是随机的
#主机3
[root@Centos3 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower	#第二个follower

安装Kafka

#主机1
[root@CentOS1 ~]# tar zxf kafka_2.11-1.0.1.tgz
[root@CentOS1 ~]# mv kafka_2.11-1.0.1 /usr/local/kafka
[root@CentOS1 ~]# cd /usr/local/kafka/config/
[root@CentOS1 config]# vim server.properties
#更改为以下内容
 21 broker.id=1		#节点标识
 31 listeners=PLAINTEXT://192.168.1.1:9092	#监听的端口
 60 log.dirs=/usr/local/kafka/data	#数据存放位置
 103 log.retention.hours=168	#分区文件中消息保存的时间 单位s
 104 message.max.bytes=1024000	#消息传递的最大 默认字节
 105 default.replication.factor=2	#备份节点默认的个数
 106 relica.fecth.max.bytes=1024000	#复制之间的最大 单位字节
 126 zookeeper.connect=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181		#连接zookeeper的IP和端口
 127 num.rtition=1	#每个topic默认的分区个数
[root@CentOS1 config]# cd /usr/local/kafka/
[root@CentOS1 kafka]# mkdir data
[root@CentOS1 kafka]# scp -r /usr/local/kafka/ root@192.168.1.2:/usr/local/kafka/
[root@CentOS1 kafka]# scp -r /usr/local/kafka/ root@192.168.1.3:/usr/local/kafka/
#主机2
[root@CentOS2 bin]# vim /usr/local/kafka/config/server.properties
 21 broker.id=2	#节点标识
 31 listeners=PLAINTEXT://192.168.1.2:9092	#监听端口
#主机3
[root@CentOS3 bin]# vim /usr/local/kafka/config/server.properties
 21 broker.id=3	#节点标识
 31 listeners=PLAINTEXT://192.168.1.3:9092	#监听端口
#三台主机启动Kafka服务
cd /usr/local/kafka/bin/
./kafka-server-start.sh -daemon ../config/server.properties
netstat -anput | grep 9092

验证:

#主机1
[root@CentOS1 bin]# ./kafka-topics.sh --create --zookeeper 192.168.1.1:2181 --partitions 1 --replication-factor 2 --topic logs
#参数释义;
--create 创建
--zookeeper 192.1 68.2.100:2181 使用的zookeeper
--partitions 1分区
--replication-factor2 备份
--topic logs 名字
#主机2
#模拟生产者
[root@CentOS2 bin]# ./kafka-console-producer.sh --broker-list 192.168.1.2:9092 --topic logs
#主机1 模拟消费者
[root@CentOS1 bin]# ./kafka-console-consumer.sh --zookeeper 192.168.1.2:2181 --topic logs --from-beginning
#去主机2发送消息,然后去主机1去查看

热门文章

暂无图片
编程学习 ·

javascript 实现所有浏览器异步加载的工具

javascript 实现所有浏览器异步加载的工具 //异步加载 实现 function loadScript(url, callback){ //新建一个script 元素 var script = document.createElement(‘script’); //再往script中添加类型 script.type=“text/javascript”; if(script.readyState){ //每当 rea…
暂无图片
编程学习 ·

3.1.1 Jsoup环境搭建

Jsoup是一款基于Java语言开发的开源项目,主要用于请求URL获取网页内容、解析HTML和XML文档。使用Jsoup可以非常轻松地构建一些轻量级的网络爬虫。 在Idea或者Eclipse中创建Maven工程,并在Maven工程的pom.xml文件中添加Jsoup对应的dependency,本专栏采用的版本是1.11.3。 <…
暂无图片
编程学习 ·

音频格式介绍和说明

零、音频压缩的原理音频文件压缩的原理很简单:因为有冗余信息,因此可以压缩。主要有两种方式实现:频谱掩蔽效应: 人耳所能察觉的声音信号的频率范围为20Hz~20KHz,在这个频率范围以外的音频信号属于冗余信号,属于可操作。时域掩蔽效应: 当强音信号和弱音信号同时出现时,…
暂无图片
编程学习 ·

IIs7上传文件大小光设置web.config还不行

打开你系统盘(我是C盘),找到 C:\Windows\System32\inetsrv\config\schema目录,该目录下有一个IIS_schema.xml修改这个:<attribute name="maxAllowedContentLength" type="uint" defaultValue="30000000" />"单位byte
暂无图片
编程学习 ·

Promethus(普罗米修斯)监控系统搭建与使用实践

1.目标 1.1 能够安装prometheus服务器 1.2 能够通过安装node_exporter监控远程linux 1.3 能够通过安装mysqld_exporter监控远程mysql数据库 1.4 能够安装grafana 1.5 能够在grafana添加prometheus数据源 1.6 能够在grafana添加监控cpu负载的图形 1.7 能够在grafana图形显示mysq…
暂无图片
编程学习 ·

云管理服务AWS Organizations正式在AWS中国区域上线

近期, AWS中国(宁夏)区域(由西云数据运营)和AWS中国(北京)区域(由光环新网运营)正式上线了云管理服务AWS Organizations。作为一种管理服务,AWS Organizations可集中控制和管理多个AWS账户,无论是初创公司还是大型企业均可以使用,而不需要额外付费。随着企业或机构…
暂无图片
编程学习 ·

navigation笔记

react native存在的问题 vscode怎样打断点 _onPressButton()为什么以下划线命名 setState用法 render()用法eslint报错 不懂的地方:不懂怎么调试 不懂apk入库yarn start报错不知道怎么去解决 1 怎样让调试栏目处于最顶部 2 怎样快速找到问题的地方 3 怎么快速打断点类为什么前…
暂无图片
编程学习 ·

硕彦博创李飞授-------计算机基础及C语言变量

一、计算机基础 计算机只能识别二进制; 1.存储单位 最小存储单位:bit(比特) ----- 存储 0和1 基本存储单位:byte(字节) ----- 1byte = 8bit 其他单位:理论上 1KB = 1024B 1MB = 1024KB 1GB= 1024MB 1TB = 1024 GB Ps: 工业上:1Gb = 1000Mb 2.数制位: 二进制:满2进1,…
暂无图片
编程学习 ·

Java 为什么Set元素是不重复的?是如何去重复的?

为什么Set元素是不重复的?是如何去重复的?对于有值特性的,Set集合可以直接判断进行去重复。例如数字1,2,本身就有值特性。 对于引用数据类型的类对象: set集合会让两两对象,先调用自己的hashCode()方法得到彼此的哈希值(所谓的内存地址) 然后比较两个对象的哈希值是否相…
暂无图片
编程学习 ·

LeetCode 590. N叉树的后序遍历

目录结构1.题目2.题解1.题目给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :返回其后序遍历: [5,6,3,2,4,1].说明: 递归法很简单,你可以使用迭代法完成此题吗?来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-ary-tree-postorder-traver…
暂无图片
编程学习 ·

企业实战--kubernetes(九)---存储(Secret)

一、Secret简介 Secret对象类型用来保存敏感信息,例如密码、OAuth令牌和ssh key。 敏感信息放在Secret中比放在Pod的定义或者容器镜像中来说更加安全和灵活。 Pod可以用两种方式来使用Secret: 作为volume中的文件被挂载到pod中的一个或多个容器中。 当kubelet为pod拉取镜像时…
暂无图片
编程学习 ·

二、三层交换机与路由器的工作原理总结

交换原理 转发决策 交换机的转发决策有三种操作:丢弃、转发和扩散。 丢弃:当本端口下的主机访问已知本端口下的主机时丢弃。 转发:当某端口下的主机访问已知某端口下的主机时转发。 扩散:当某端口下的主机访问未知端口下的主机时要扩散。 每个操作都要记录下发包端的源MAC地…
暂无图片
编程学习 ·

写给跨端玩家:支撑淘宝上亿日活的跨端框架—— Rax 的入门教程(附 TODO Demo)

一些废话沉寂了两个月,我又回来了。跟你们猜的一样,我已经到淘系实习了一段时间了,从上一篇文章之后就放了更多的心思在工作上。上篇文章发出去之后,我去腾讯实习了一段时间,等待阿里实习生入职流程开启。 收到淘系的实习生 offer 后,我买了人生中的第一张机票,第一次坐…
暂无图片
编程学习 ·

使用Feign进行服务调用上传文件时的采坑记录

今天在进行文件上传的接口测试中,Feign的对端一直获取不到图片,在排除了Feign配置、契约等错误后,终于在bebug中发现了问题所在。 注意!! 在前端第一次将图片上传至后端时,默认的StandardMultipartHttpServletRequest会将形式参数的名字作为MultipartFile中的part属性的n…
暂无图片
编程学习 ·

所谓敏捷开发与瀑布开发

所谓敏捷开发与瀑布开发0.写在前面1.常见的开发模式2.什么是敏捷开发?2.1 敏捷开发宣言:2.2优点:2.3 确点:3.什么是瀑布开发?3.1 优点:3.2 缺点: 0.写在前面 项目管理者面临的一个大BUG是:程序员开发的是客户业务的软件项目,但客户不了解软件,开发者不了解业务,如何…
暂无图片
编程学习 ·

SpringSecurity(安全)

SpringSecurity(安全) 认识SpringSecurity Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全…
暂无图片
编程学习 ·

Shiro简介

Shiro框架: 产生原因: 1.使用RBAC进行角色访问控制的时候,代码书写起来相对比较麻烦 2.现阶段操作代码整体不太安全 解决方法: Spring securing 安全框架 缺点:基于Spring之上的,局限性大 shiro javaEE javaSE 分布式项目Apache Shiro是一个强大而灵活的开源安全框架,它…
暂无图片
编程学习 ·

数据挖掘技术具有哪些特点?

数据挖掘源自《从数据库中发现知识》(缩写为KDD)。它首次出现在1989年8月在底特律举行的第十一届国际联合人工智能会议上。为了统一理解,Fayyad,Piatetsky-Shapiro和Smyth在权威文章集《知识发现与数据进展》中给出了KDD和数据挖掘的最新定义。从中总结了1996年该领域的进展…
暂无图片
编程学习 ·

taro中使用echarts

1.参考自该博客 https://blog.csdn.net/weixin_34019144/article/details/88669595 2.去该博客中下载示例项目,将component下ec-canvas(原生组件)文件夹放到自己项目的components下, 3.引入echarts方法 import * as echarts from ‘…/…/components/ec-canvas/echarts’ …
暂无图片
编程学习 ·

Graylog 部署(Centos + MongoDB + Graylog 3.2 + Elasticsearch )

CentOS6 或7或更高都可以 1.安装 MongoDB 手动建立 mongodb repo 源,如果没有安装 vim,则先执行 yum install vim在线安装mongodb vim /etc/yum.repos.d/mongodb-org-3.6.repo配置如下 [mongodb-org-3.6] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redh…