kafka学习之一简单安装以及使用

1. 初识kafka框架

​ kafka是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统(所谓消息系统:用于在不同应用之间传输数据的消息引擎系统)。

其设置初衷是为了解决互联网公司超大量级数据的实时传输,其具备如下能力

  • 高吞吐量/低延时
  • 消息持久化
  • 负载均衡和故障转移
  • 伸缩性
高吞吐量/低延时
  1. kafka消息持久化大量使用页缓存,读写消息大概率可以命中操作系统页缓存(此处需要明晰:kafka的消息持久化是直接追加到磁盘上的(磁盘为了存储快捷使用了页缓存)

  2. kafka不直接参与物理IO,而是由操作系统进行操作

  3. 写消息采用追加的方式,使用了磁盘顺序写(避免了磁盘随机写性能慢的问题)

  4. 读消息使用了liunx的sendfile的零拷贝技术

消息持久化

​ kafka框架设计的时候和别的mq框架不同,别的mq框架对于消息先使用缓存(内存),在一定时机再将缓存持久化到磁盘,而是一反常态直接使用追加写>(利用了磁盘的属性写和内存写性能相同的场景)。 kafka消息持久化是直接持久化到磁盘(顺序写),并没有采用先缓存到内存进而持久化到磁盘,因为顺序写到磁盘的速度和内存随机写的速度相当。

负载均衡和故障转移

​ kafka实现负载均衡是通过分区领导者选举(partition leader election)来实现的,使得机器上以均等的机会分散各个partition的leader从而整体上实现负载均衡。

​ kafka实现故障转移使用所有服务节点都会以会话的形式将自己注册到zk上,服务器出现宕机情况则会出现会话超时失效,此时kafka集群会选举出新的机器来提供服务。

伸缩性

​ 伸缩性是指向某个分布式系统添加(伸)和去除(缩)服务资源从而动态改变其吞吐量的能力。阻碍线性扩容的常见因素之一是服务节点之间状态的保存,服务器之间需要保存很多内部状态,自己保存的化需要处理之间的数据一致性问题,如果服务无状态(少量状态)则状态管理可以交给分布式协调服务(比如zk)来处理,进而可以很容易的扩缩容(启动新节点、下线节点)等。

而kafka就是使用zk来保管其服务节点状态(也并非使用zk来保管其所有状态,kafka节点还会自己保存少量状态)。

适用于如下需求场景:

  • 基于hadoop的批处理系统、
  • 低延迟的实时系统、
  • Storm/Spark流式处理引擎,
  • 监控日志收集
  • 消息服务

设计一个消息系统需要关注两方面因素:

  1. 消息体的设计:常见的消息体格式有xml,json、二进制等
  2. 传输协议的设计:常见的消息传输有两种形式 消息队列形式、发布/订阅模式

kafka采用的消息体是二进制的形式,传输协议是基于发布/订阅

2. kafka单节点使用

2.1 搭建环境

​ 说明:此处kafka的版本是2.10版本,所有环境搭建和使用均基于该版本进行(其他版本可能会命令会有不同,其他版本自行百度)

#kafka是使用scala语言开发(运行在jvm上) 需要确保环境安装了jdk
#同时需要确保安装了zk (kafka需要注册到zk上使用)

#1、下载kafka kafka_2.11-2.10.tgz 2.11是scala版本  2.10是kafka的版本
 wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz

#2、解压文件 
 tar -zxvf /home/kafka_2.12-3.0.0.tgz -C /usr/local/
 
#3、 启动kafka,运行日志在logs目录的server.log文件里
#后台启动,不会打印日志到控制台
 ./bin/kafka-server-start.sh -daemon config/server.properties  
#或者用
 bin/kafka-server-start.sh config/server.properties &

# 我们进入zookeeper目录通过zookeeper客户端查看下zookeeper的目录树
 bin/zkCli.sh 
#查看zk的根目录kafka相关节点
 ls /brokers/ids	#查看kafka节点
 [zk: localhost:2181(CONNECTED) 5] ls /brokers/ids 
 [0]  #显示出现brokers id为0的节点已经在zk上创建(与我们server.properties配置的brokers.id=0一致)

#4、停止kafka
 bin/kafka
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值