浅析kafka与集群安装

Kafka介绍

  • Kafka是什么

kafka的核心概念由分布式、高吞吐量的消息引擎转变成为分布式的流式处理平台。

  • kafka是如何做到分布式的

kafka本身做成了无状态的机制,而所有状态信息,如集群的节点、topic、分区等信息均由zookeeper进行管理,而zookeeper本身是分布式的

  • kafka是如何做到高吞吐量的

kafka在底层摒弃了Java的堆缓存机制,采用了操作系统级别的页缓存,同时将随机写操作改为顺序写,再结合Zero-Copy的特性极大的改善了IO性能。

另外kafka使用到了分区的概念,分区也是kafka最小的调度单元,通过将topic消息打散到多个不同的分区上面去,这些分区存放在不同的broker上面,这样来实现消息生产者与消费者的高吞吐量且能够线性的扩展。

  • 如何确立一个topic的分区数量呢

在kafka中存在消费组与消费者的概念,一个消费组可包含多个消费者。一个topic可以有多个分区,但一个分区只允许被一个消费组内的一个消费者享有,可以被多个消费组的多个消费者享有。存在消费组的概念是为了满足一个消息可以被多个消费者使用的需求,需要将这多个消费者设置成不同的消费组,这也就是发布订阅的模型。

如果要实现队列的模型,多个消费者处在一个消费组内,首先我们预先是知道消费者的数量的,来假设一下,如果消费者数量大于分区数量,会导致部分消费者接收不到数据,造成了浪费;如果消费者数量小于分区数量,会导致了kafka这侧的资源浪费,所以当两者相等时,比较合理。

  • 消息与分区的分配机制

当生产者产生消息后,是如何选择分区的呢。现在spring的上层接口己接供了多种API接口,如下所示。

send(String topic, V data)
send(String topic, K key, V data)
send(String topic, int partition, V data)
send(String topic, int partition, K key, V data)

data是指具体的消息内容,key是指分区路由的一个关键字,partition是指具体的分区。如果在没有显示指定key的情况下,kafka会从zookeeper中获取分区信息决策发往哪个分区,默认是随机选择;如果显示指定了key,则会根据hash(key) % partitionNum来决定;当指明了partition后则会直接发往该分区,这在有业务消息顺序的场景下非常重要。

kafka集群安装

安装环境与版本说明

kafka版本采用kafka_2.11-1.1.0,下载安装包

kafka依赖了zookeeper,选择三台机器如下,为什么是奇数台,这是因为选举机制奇数比较容易仲裁。

172.16.18.181
172.16.18.191
172.16.18.11

安装JDK环境就不说了。

将安装包解压到/home/kafka_2.11-1.1.0目录下。

配置zookeeper集群

在下载的kafka安装包中己经包含了zookeeper安装包,当然你也可以自行下载单独的zookeeper安装包,在此我使用的是自带的。

修改zookeeper.properties

/home/kafka_2.11-1.1.0/conf目录下修改zookeeper.properties文件如下所示。

tickTime=2000
initLimit=10
syncLimit=5

dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0

server.1=172.16.18.181:2887:3887
server.2=172.16.18.191:2887:3887
server.3=172.16.18.11:2887:3887

增加myid文件

myid文件是一个服务标识文件,有时需要手动添加,在/tmp/zookeeper目录下touch myidecho 1 > myid

当然181节点标识为1,191节点标识为2,11节点标识为3。

启动服务

经过以上两步,并将修改部分同步到其它两台机器。

分别在三个节点的/home/kafka_2.11-1.1.0/bin目录,执行./zookeeper-server-start.sh ../config/zookeeper.properties`命令启动服务。

执行./zookeeper-shell.sh 172.16.18.181:2181 登陆客户端,也就是我们理解的CLI命令,使用help命令可以查询到支持的命令列表,在此不一一详解。

配置kafka集群

修改server.properties

server.properties为kafka的主配置文件,修改内容如下所示。

# 根据节点编号进行修改,如3个节点,0-2或1-3
broker.id=0   
# 这里定要将本节点的IP给补上
listeners=PLAINTEXT://172.16.18.181:9092
# 预定义的分区数量,也可以后续使用脚本进行修改
num.partitions=3
# topic消息的备份副本数量
offsets.topic.replication.factor=3
# zookeeper服务节点
zookeeper.connect=172.16.18.181:2181,172.16.18.191:2181,172.16.18.11:2181

在另外两台191与11节点上同步进行修改。

启动kafka

从以上步骤来看,配置kafka集群非常简单,因为它的状态管理均放到了zookeeper中进行管理。

在每个节点的/home/kafka_2.11-1.1.0/bin目录下执行./kafka-server-start.sh ../config/server.properties启动服务。

kafka管理工具

kafka本身没有提供像activemq、rabbitmq那样丰富的管理界面,不过也有第三方的工具支持,目前主要有Kafka Web Conslole、Kafka Manager、KafkaOffsetMonitor,从反馈来看Kafka Manager用得比较多点,后面再介绍使用过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值