J1angの小白式kafka学习总结(1)
kafka学习阶段性总结(1)
- kafka概述
- 基本概念:什么是kafka
- 消息队列的两种模式
- 为什么要使用kafka
- kafka的基本架构组成
- kafka架构
- kafka组成
- 集群配置
- jar包下载
- 配置过程
- 解压安装包
- 修改解压后的文件名称
- 在/opt/module/kafka目录下创建logs文件夹
- 修改配置文件
- 配置环境变量
- 分发安装包
- 启动集群
- 关闭集群
- kafka简单命令
- 查看当前服务器中的所有topic
- 创建topic
- 删除topic
- 发送消息
- 消费消息
- 查看某个Topic的详情
- 修改分区数
kafka概述
基本概念:什么是kafka
kafka是由Linkedln公司开发,后成为Apache项目的一个分布式的基于发布/订阅模式的消息队列。
消息队列的两种模式
1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)
消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。
消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
2)发布/订阅模式(一对多,消费者消费数据之后不会清除消息)
消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。
为什么要使用kafka
缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。
解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
以下是kafka是消息队列的点
健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
kafka的基本架构组成
kafka架构
图解:
1、图1首先是一个一对多的消息队列的架构,在kafka中,为了方便扩展并提高吞吐量,一个topic(可理解为存放数据的一个队列)分为多个partition(图2)。
2、分成如图的3个分区,物理上是分开的,它是可能存在于不同的节点。逻辑上,这3个分区是一个整体,加起来就是一个topic。
3、为了进一步提高消费的效率,并配合前面分的3个3分区,有了消费者组的概念。(3个人协同来消费3个分区肯定比一个人消费3个分区来的好啦~(^ ^))ps:效率最高的情况是一个消费者消费一个分区,当然只是理想情况,现实并不能如此精确。
4、为了提高可用性,给每个partition增加若干个(1个或多个)副本。副本的节点是要与其主分布在不同的节点的。
5、有了副本的概念自然就有了主从关系。leader&follower
6、kafka需要依赖zookeeper运行,其中zookeeper 是一个分布式的协调组件,早期版本的kafka用zk做meta信息存储,consumer的消费状态,group的管理以及 offset的值。考虑到zk本身的一些因素以及整个架构较大概率存在单点问题,新版本中逐渐弱化了zookeeper的作用。新的consumer使用了kafka内部的group coordination协议,也减少了对zookeeper的依赖,但是broker依然依赖于ZK,zookeeper 在kafka中还用来选举controller 和 检测broker是否存活等等。
kafka组成
(1)Producer :消息生产者,就是向kafka broker发消息的客户端;
(2)Consumer :消息消费者,向kafka broker取消息的客户端;
(3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
(4)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。 | broker 是消息的代理,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一个代理保存消息的中转站。
(5)Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic;
(6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列;
(7)Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。num.rep <= num.broker
(8)leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。
(9)follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的leader。
集群配置
jar包下载
http://kafka.apache.org/downloads
(以下使用kafka_2.11-2.4.1.tgz)
配置过程
解压安装包
[j1ang@hadoop104 software]$ tar -zxvf kafka_2.11-2.4.1.tgz -C /opt/module/
修改解压后的文件名称
[j1ang@hadoop104 module]$ mv kafka_2.11-2.4.1/ kafka
在/opt/module/kafka目录下创建logs文件夹
[j1ang@hadoop104 kafka]$ mkdir logs
修改配置文件
[j1ang@hadoop104 kafka]$ cd config/
[j1ang@hadoop104 config]$ vi server.properties
输入以下内容:
#broker的全局唯一编号,不能重复
broker.id=4
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/opt/module/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop104:2181,hadoop105:2181,hadoop106:2181/kafka
配置环境变量
[j1ang@hadoop104 module]$ sudo vi /etc/profile.d/my_env.sh#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$ PATH:$KAFKA_HOME/bin
[j1ang@hadoop104 module]$ source /etc/profile
分发安装包
[j1ang@hadoop104 module]$ xsync kafka/
注意:分发之后记得配置其他机器的环境变量
分别在hadoop105和hadoop106上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=5、broker.id=6
注:broker.id不得重复
启动集群
依次在hadoop104、hadoop105、hadoop106节点上启动kafka
[j1ang@hadoop104 kafka]$ kafka-server-start.sh -daemon $ KAFKA_HOME/config/server.properties
[j1ang@hadoop105 kafka]$ kafka-server-start.sh -daemon $ KAFKA_HOME/config/server.properties
[j1ang@hadoop106 kafka]$ kafka-server-start.sh -daemon $ KAFKA_HOME/config/server.properties
关闭集群
[j1ang@hadoop104 kafka]$ bin/kafka-server-stop.sh
[j1ang@hadoop105 kafka]$ bin/kafka-server-stop.sh
[j1ang@hadoop106 kafka]$ bin/kafka-server-stop.sh
kafka简单命令
查看当前服务器中的所有topic
[j1ang@hadoop104 kafka]$ kafka-topics.sh --list --bootstrap-server hadoop104:9092
创建topic
[j1ang@hadoop104 kafka]$ kafka-topics.sh --create --bootstrap-server hadoop104:9092 --topic first --partitions 2 --replication-factor 2
选项说明:
–topic 定义topic名
–replication-factor 定义副本数
–partitions 定义分区数
删除topic
[j1ang@hadoop104 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka \
--delete --topic first
需要server.properties中设置delete.topic.enable=true否则只是标记删除。
发送消息
[j1ang@hadoop104 kafka]$ bin/kafka-console-producer.sh \
--broker-list hadoop104:9092 --topic first
>hello world
>j1ang j1ang
消费消息
[j1ang@hadoop105 kafka]$ bin/kafka-console-consumer.sh \
--bootstrap-server hadoop104:9092 --from-beginning --topic first
–from-beginning:会把主题中以往所有的数据都读取出来。
查看某个Topic的详情
[j1ang@hadoop104 kafka]$ kafka-topics.sh --bootstrap-server hadoop104:9092 --describe --topic first
修改分区数
[j1ang@hadoop104 kafka]$bin/kafka-topics.sh --zookeeper hadoop104:2181/kafka --alter --topic first --partitions 6
J1angの小白式kafka学习总结(1)相关推荐
- Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover
1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...
- Kafka学习【1】
Kafka学习[1] Kafka的用途有哪些?使用场景如何?### 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦.冗余存储.流量削峰.缓冲.异步通信.扩展性.可恢复性等功 ...
- Kafka学习之消费者
Kafka学习之消费者 前言 本博客主要介绍up在学习kafka中间件时候觉得需要记录的知识点. 内容 1.消费者与消费组 消费者(Consumer)负责订阅Kafka中的主题(Topic),并且从订 ...
- Kafka学习笔记(一):什么是消息队列?什么是Kafka?
目录 一.消息队列的概述 (一)前置知识点 1.集群和分布式 2.队列(Queue)的含义 3.同步与异步的含义 (二)消息队列的含义与特点 二.Kafka (一) 概述 (二) 常用名词含义 导航栏 ...
- [Big Data - Kafka] kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...
- 小白该如何学习Linux操作系统(2)
献给初学者:小白该如何学习Linux操作系统(2) 三.用虚拟机软件学习linux 3.1 什么是虚拟机软件 虚拟机软件能够在一台电脑上模仿出来若干台PC电脑,每台PC能够运转独自的操作系统而互不搅扰 ...
- 扇贝编程python是干嘛的-产品观察 | 以对话式互动学习撬动转化,扇贝编程瞄准职教市场...
原标题:产品观察 | 以对话式互动学习撬动转化,扇贝编程瞄准职教市场 成人编程教育是职业教育行业最火热的赛道之一,除了行业内的垂直创业公司,越来越多教育公司也在把业务线延展至这一领域,以便深度结合业务 ...
- 如何自学python爬虫-小白如何快速学习Python爬虫?
原标题:小白如何快速学习Python爬虫? 很多同学想学习 爬虫 ,对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.而且爬虫是入门 Python 最好的方式,没有之一. 我们可以通过爬虫获取 ...
- kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
最新文章
- 力求企业的内部公平性
- 开发环境wamp3.06 + Zend studio 12 调试配置
- autodock tool文件_AutoDock软件的下载、安装及使用 - 量子化学 - 小木虫 - 学术 科研 互动社区...
- 波音737-800座位图哪个好_澳媒一张图揭秘,飞机选座秘诀!经济舱最舒适的位置在这儿...
- python爬取贴吧所有标题的评论_用BS4爬取贴吧文章的作者信息时,如何兼顾爬取高亮的作者信息?...
- Matlab图像处理创新实践-实验3【图像锐化】
- fastreport字体自适应_FastReport 自动换行与行高自适应及自动增加空行
- CMake使用详解二(多文件编译)
- 第二章 Java浮点数精确计算
- pdf转chm_PDF转Excel的小妙招!
- 【运筹学】分支定界法 ( 分支定界法求整数规划示例 ) ★★
- 数独基本规则_数独游戏规则?
- easyexcle 设置列宽_在excel中,如何让excel的列宽自动调整
- RSA的APT峰会会议纪要
- 大数据(3i)Sqoop安装和操作
- 栈的应用之符号匹配问题
- 虚拟机booting from hard disk_一分钟带您快速了解虚拟机软件
- 思维导图在线制作,好用的思维导图软件分享
- JavaScript反调试技巧
- 航空爱好者自问自答(2)