目录
三、利用安装 zookeeper 的三台服务器做 KAFKA 集群
一、 简单介绍
什么是 kafka 呢,他是 LinkedIn 开发的一个分布式消息系统,用 scala 编写的,可以水平扩展和高吞吐率。
原本开发自 LinkedIn,用作他们的活动流和运营数据处理管道的基础,之后被多家公司使用,慢慢发展壮大起来。
kafka 是分布式的,基于发布/订阅的消息系统。
1、 即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。
2、 高吞吐率:即使在非常廉价的商用机器上也能做到单机支持每秒 100k 条以上消息的传输。
3、 支持分区,消息分布式消费,但是只能保证每个 partition 内的消息顺序传输。并且支持在线水平扩展。
为何使用消息中间件呢,大家肯定接触过 rabbitmq、activemq、redis 等,估计有很多感触。我就不详细描述了,这
个只能亲身参加过大的技术架构,自己身在其中,并且感受到不用消息中间件和用的区别。
二、 架构
了解架构之前,我们先了解一下基本名词。
Broker:安装了 kafka 的服务器就是一个 broker。
Topic:消息的类比,最好一类数据定一个 topic 去存储传输。
Partition:分区,topic 可以定分到几个分区中。
Producer:发送消息,发送者。
Consumer:消费消息,消费者。
Consumer Group:每个 Consumer 属于一个特定的 Consumer Group。
从图中来看,kafka 集群包含若干个 producer 和 consumer 以及 broker,还有一个 zk 集群。Producer 通过 push 模式将数据发送到 broker,Consumer 通过 pull 模式拉取数据。
Producer 发送消息到 broker 时,根据 partition 机制选择分不到哪一个 partition,设置合理的情况下,所有消息可以均匀分不到不同的 partition 里,实现了负载均衡。
三、利用安装 zookeeper 的三台服务器做 KAFKA 集群
3.1 下载 kafka_2.9.2-0.8.1
下载地址:https://archive.apache.org/dist/kafka/0.8.1/kafka_2.9.2-0.8.1.tgz
分别在三台服务器创建kafka目录并且下载kafka压缩包
mkdir /usr/local/kafka
tar –zxvf kafka_2.9.2-0.8.1.tar.gz
3.2 创建log文件夹
mkdir /usr/local/kafka/kafkalogs
3.3 配置kafka
cd /usr/local/kafka/kafka_2.9.2-0.8.1/config
# vi server.properties 修改项如下:
broker.id=0 //当前机器在集群中的唯一标识
port=9092 //kafka对外提供服务的tcp端口
host.name=10.211.55.7 //主机IP地址
log.dirs=/usr/local/kafka/kafkalogs //log存放目录
message.max.byte=5048576 //kafka一条消息容纳的消息最大为多少
default.replication.factor=2 //每个分区默认副本数量
replica.fetch.max.bytes=5048576
zookeeper.connect=10.211.55.7:2181, 10.211.55.8:2181, 10.211.55.9:2181
3.4 启动kafka
./kafka-server-start.sh -daemon ../config/server.properties //后台启动运行
3.5 问题解决
root@master ~]# /export/kafka/bin/kafka-console-producer.sh --broker-list
10.14.2.201:9092,10.14.2.202:9092,10.14.2.203:9092,10.14.2.204:9092 --topic test
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
# /export/kafka/bin/kafka-console-consumer.sh --zookeeper
10.14.2.201:2181,10.14.2.202:2181,10.14.2.203:2181,10.14.2.204:2181 --topic test --from-beginning
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
解决方法:
# 下载slf4j-1.7.6.zip
# http://www.slf4j.org/dist/slf4j-1.7.6.zip
# 解压
unzip slf4j-1.7.6.zip
# 把slf4j-nop-1.7.6.jar 包复制到kafka libs目录下面
cd slf4j-1.7.6
cp slf4j-nop-1.7.6.jar /export/kafka/libs/
四、KAFKA 集群验证
4.1 创建 topic
./kafka-topics.sh --create --zookeeper 10.211.55.7:2181 --replication-factor 1 --partitions 1 --topic test
4.2 查看 topic
./kafka-topics.sh --list --zookeeper 10.211.55.7:2181
4.3 开启发送者并发送消息
./kafka-console-producer.sh --broker-list 10.211.55.7:9092 --topic test
4.4 开启消费者并接收消息
./kafka-console-consumer.sh --zookeeper 10.211.55.8:2181 --topic test --from-beginning