2019一篇文章了解kafka与集群的详细搭建

kafka基本概念:

1.什么是kafka 

1). apache kafka 是一个开源的分布式消息队列 (生产者消费者模式)

2).apache kafka 目标: 构建企业中统一的,高通量的,低延迟的消息平台

3).大多的消息队列(消息中间件) 都是基于 JMS 标准实现的, apache kafka 类似于 JMS 的实现

1.2 kafka 的特点

*作为缓冲(流量消减),来异构,解耦系统

    *用户注册需要完成多个步骤,每个步骤执行都需要很长时间,代表用户等待时间是所有步骤的累计时间

    *为了减少用户等待的时间,使用并执行,有多少个步骤,就开启多少个线程来执行,代表用户等待时间是所有步骤中消耗时间最长的半个步骤时间

    *有了新的问题: 开启多个线程执行每个步骤,如果有个步骤执行异常,或者严重超时,用户等待的时间就不可控制了.

    *通过消息队列来保证

    *注册时,立即返回成功

    *发送注册成功的消息到消息平台


消息中间件

2.Apache kafka 的基本架构


kafka的基本架构

* kafka cluster :由多个服务器组成, 每个服务器单独的名字 broker

* kafka broker : kafka 集群中包含的服务器

* kafka producer : 消息生产者, 发布消息到 kafka 集群的终端或服务

* kafka consumer : 消息消费者 ,负责消费数据

* kafka topic : 主题,一个类型消息的名称.存储数据时将同一类的数据存放在某个 topic 下,消费数据也是消费一类的数据

比如:

    订单系统: 创建一个 topic ,叫做 order

    用户系统: 创建一个 topic ,叫做 user

    商品系统: 创建一个topic ,叫做product

*注意: kafka 的元数据都是存放在 zookeeper 中的

3. 搭建kafka 集群

3.1 准备工作:

1) 准备三台服务器,安装jdk 1.8 ,其中每一台虚拟机的hosts 文件中都要配置如下(域名映射)的内容:

192.168.72.141 node01

192.168.72.142 node02

192.168.72.143 node03

2) 安装目录的 /export/servers         mkdir -p /export/servers/

3) zookeeper 集群安装并启动好(参见我的zookeeper集群安装与配置)

3.2 去官网下载安装包

由于kafka是scala 语言编写的,基于Scala的多个版本,kafka 发布了多个版本,

这里推荐使用 2.11 版本.

推荐2.11 版本

3.3 上传压缩包并解压


上传压缩包解压


解压后改名,修改配置文件server.properties


(三台不同)node01机器配置broker.id ,listeners
修改日志目录.并创建这个文件夹,mkdir -p
配置好zookeeper集群,这样一台机器就配好了
把配好的机器,分发到集群的其他机器,并修改对应的数据,就配置好了:
三台机器启动kafka  

启动命令:  ./kafka-server-start.sh /export/servers/kafka/config/server.properties 1>/dev/null 2>&1 &


由于kafka集群并没有UI界面可以查看,所以我们可以通过查看zookeeper ,来判断 kafka 集群是否正常运行.

1)使用zookeeper的可视化工具进行查看.


到这里kafka的集群已经安装完毕,启动嫌麻烦的话,可以自己写一个脚本,下面附上脚本代码.给有兴趣的人.

三个脚本


三个脚本的代码

为什么要免密登录 因为集群节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点 登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦

 免密 SSH 登录的原理 

1. 需要先在 B节点 配置 A节点 的公钥

 2. A节点 请求 B节点 要求登录 

3. B节点 使用 A节点 的公钥, 加密一段随机文本

4. A节点 使用私钥解密, 并发回给 B节点 5. B节点 验证文本是否正确

第一步:三台机器生成公钥与私钥

在三台机器执行以下命令,生成公钥与私钥

ssh-keygen -t rsa

执行该命令之后,按下三个回车即可

第二步:拷贝公钥到同一台机器

三台机器将拷贝公钥到第一台机器

三台机器执行命令:

ssh-copy-id node01

第三步:复制第一台机器的认证到其他机器

将第一台机器的公钥拷贝到其他机器上

在第一天机器上面指向以下命令

scp /root/.ssh/authorized_keys node02:/root/.ssh

scp /root/.ssh/authorized_keys node03:/root/.ssh


4.kafka 的基本使用

kafka 其本身就是一个消息队列的中间件,主要是用来实现系统与系统之间信息的传输,一般有两大角色,一个是生产者,一个是消费者.

所以kafka 的基本使用,就是用来如何使生产者发送数据,如何去消费数据,kafka提供了两种方式来进行实现, 一种是采用kafaka 自带的脚本来操作,另一种是使用相关的语言的 API 来进行操作.

4.1 使用脚本操作kafka

说明: 索引执行的脚本文件都存放在kafka的bin目录中, 需要先进入bin目录才可以执行 

cd /export/servers/kafka/bin

1) 创建一个topic: topic: 指的是话题, 主题的意思, 在消息发送的时候, 我们需要对消息进行分类, 生产者和消费 者需要在同一个topic下, 才可以进行发送和接收

./kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 1 -partitions 1 --topic order

2) 使用Kafka自带一个命令行客户端启动一个生产者,生产数据

./kafka-console-producer.sh --broker-list node01:9092 --topic order

3) 使用Kafka自带一个命令行客户端启动一个消费者,消费数据

./kafka-console-consumer.sh --bootstrap-server node01:9092 --topic order

该消费语句,只能获取最新的数据,要想历史数据,需要添加选项--from-beginning

如:bin/kafka-console-consumer.sh --bootstrap-server node01:9092 --from-beginning --topic order

4) 查看有哪些topic

./kafka-topics.sh --list --zookeeper node01:2181

5) 查看某一个具体的Topic的详细信息

./kafka-topics.sh --describe --topic order --zookeeper node01:2181

6) 删除topic

./kafka-topics.sh --delete --topic order --zookeeper node01:2181

注意:彻底删除一个topic,需要在server.properties中配置delete.topic.enable=true,否则只 是标记删除 配置完成之后,需要重启kafka服务。

也可以通过zookeeper的客户端工具, 直接将topic的对应节点删除

4.2 使用API 操作kafka,这里以java API 为例.直接去官网复制例子进行修改就好了.

5. apache kafka 原理

5.1 分片与副本机制:

此处的分片值得是对 topic 中的数据进行分片和建立副本,一个个topic 可以理解为 solrCloud 中一个个大的索引库

分片机制: 主要解决了单台服务器存储容量有限的问题

当数据量非常大的时候,一个服务器存放不下,就将数据分成两个或者多个部分,存放在多台服务器上,每个服务器上的额数据,就叫做一个分片.


分片机制

副本: 副本备份机制是为了解决数据存储的高可用的问题

当数据只保存一份的时候,有丢失的风险,为了更好的容错和容灾,将数据拷贝几份,保存到不同的机器上面.


分片和副本

5.2 kafka 保证数据不丢失的机制

5.2.1 保证生产者端不丢失


生产者端数据不丢失的机制

1) 消息生产分为同步模式/异步模式

2)消息确认分为 三个状态:

0 : 生产者只负责数据的发送:

1 : 某个 partition 的 leader 收到数据给出响应

-1 : 某个 partition 的所有副本都收到数据后给出响应 (partition 指上文说的一个分片,leader 指的是所有的副本中只有一个leader能执行写,修改等操作,其他follower的只能提供读的操作,并且和leader 进行同步)

3) 在同步模式下

a) 生产者等待 10s ,如果 broker(指集群中的一台kafka服务器) 没有给出 ack 响应,就认为失败.

b) 生产者重试3次, 如果还没有响应,就报错

4)在异步模式下:

a) 先将数据保存在生产者端的 buffer 中,buffer 大小是2 万条

b)满足数据阀值或者数量(时间)阀值其中的一个条件就可以发送数据

c) 发送一批数据的大小是 500 条

如果broker 迟迟不给 ack ,而 buffer 又满了

开发者可以设置是否清空 buffer 中的数据,如果不清空,表示等待



未完待续....有空更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容