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)相关推荐

  1. Kafka学习笔记(3)----Kafka的数据复制(Replica)与Failover

    1. CAP理论 1.1 Cosistency(一致性) 通过某个节点的写操作结果对后面通过其他节点的读操作可见. 如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性 如果允许之后部分或全 ...

  2. Kafka学习【1】

    Kafka学习[1] Kafka的用途有哪些?使用场景如何?### 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦.冗余存储.流量削峰.缓冲.异步通信.扩展性.可恢复性等功 ...

  3. Kafka学习之消费者

    Kafka学习之消费者 前言 本博客主要介绍up在学习kafka中间件时候觉得需要记录的知识点. 内容 1.消费者与消费组 消费者(Consumer)负责订阅Kafka中的主题(Topic),并且从订 ...

  4. Kafka学习笔记(一):什么是消息队列?什么是Kafka?

    目录 一.消息队列的概述 (一)前置知识点 1.集群和分布式 2.队列(Queue)的含义 3.同步与异步的含义 (二)消息队列的含义与特点 二.Kafka (一) 概述 (二) 常用名词含义 导航栏 ...

  5. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  6. 小白该如何学习Linux操作系统(2)

    献给初学者:小白该如何学习Linux操作系统(2) 三.用虚拟机软件学习linux 3.1 什么是虚拟机软件 虚拟机软件能够在一台电脑上模仿出来若干台PC电脑,每台PC能够运转独自的操作系统而互不搅扰 ...

  7. 扇贝编程python是干嘛的-产品观察 | 以对话式互动学习撬动转化,扇贝编程瞄准职教市场...

    原标题:产品观察 | 以对话式互动学习撬动转化,扇贝编程瞄准职教市场 成人编程教育是职业教育行业最火热的赛道之一,除了行业内的垂直创业公司,越来越多教育公司也在把业务线延展至这一领域,以便深度结合业务 ...

  8. 如何自学python爬虫-小白如何快速学习Python爬虫?

    原标题:小白如何快速学习Python爬虫? 很多同学想学习 爬虫 ,对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.而且爬虫是入门 Python 最好的方式,没有之一. 我们可以通过爬虫获取 ...

  9. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

最新文章

  1. 力求企业的内部公平性
  2. 开发环境wamp3.06 + Zend studio 12 调试配置
  3. autodock tool文件_AutoDock软件的下载、安装及使用 - 量子化学 - 小木虫 - 学术 科研 互动社区...
  4. 波音737-800座位图哪个好_澳媒一张图揭秘,飞机选座秘诀!经济舱最舒适的位置在这儿...
  5. python爬取贴吧所有标题的评论_用BS4爬取贴吧文章的作者信息时,如何兼顾爬取高亮的作者信息?...
  6. Matlab图像处理创新实践-实验3【图像锐化】
  7. fastreport字体自适应_FastReport 自动换行与行高自适应及自动增加空行
  8. CMake使用详解二(多文件编译)
  9. 第二章 Java浮点数精确计算
  10. pdf转chm_PDF转Excel的小妙招!
  11. 【运筹学】分支定界法 ( 分支定界法求整数规划示例 ) ★★
  12. 数独基本规则_数独游戏规则?
  13. easyexcle 设置列宽_在excel中,如何让excel的列宽自动调整
  14. RSA的APT峰会会议纪要
  15. 大数据(3i)Sqoop安装和操作
  16. 栈的应用之符号匹配问题
  17. 虚拟机booting from hard disk_一分钟带您快速了解虚拟机软件
  18. 思维导图在线制作,好用的思维导图软件分享
  19. JavaScript反调试技巧
  20. 航空爱好者自问自答(2)

热门文章

  1. Demystifying Ethernet Types— Difference between Cat5e, Cat 6, and Cat7
  2. PS 色相、饱和度和明度
  3. 各国电源插头标准和电压标准
  4. 微信公众号开发完整教程(一) PHP7.0版本,TP5.0框架
  5. 赛博朋克风格奇幻少女 集原美电脑4k壁纸3840x2160
  6. 2D转3D技术的优势
  7. (个人学习)资金托管与资金存管的区别
  8. Unity见缝插针游戏源码完整版
  9. 数组的创建和初始化(C语言)
  10. 每秒处理10万订单乐视集团支付架构