Kafka只能保证一个分区之内消息的有序性,在不同的分区之间是不可以的,这已经可以满足大部分应用的需求。如果需要Topic中所有消息的有序性,那就只能让这个Topic只有一个分区,当然也就只有一个Consumer组消费它。
3 环境准备安装Kafka集群之前,需要首先安装JDK和Zookeeper集群,同时也需要对集群中各节点机器的Linux环境进行配置,其具体方法请参考我的另一篇文章《搭建Hadoop2.0高可用集群 》。我的Kafka集群就在此集群基础上进行安装配置。
4 搭建Kafka集群// 在Hadoop-master1节点解压kafka安装包
$ tar-xvf kafka_2.11-0.10.0.0.tgz
// 进入kafka工作目录并���见一个logs目录
$ cd kafka_2.11-0.10.0.0/
$ mkdir logs
// 编辑配置文件server.properties
$ vim config/server.properties
# 设置日志存放的目录
log.dirs=/home/hadoop/app/kafka_2.11-0.10.0.0/logs
# 设置分区数
num.partitions=2
# 设置zookeeper地址
zookeeper.connect=hadoop-slave1:2181,hadoop-slave2:2181,hadoop-slave3:2181
# 设置服务器接收消息的最大字节数为5M
message.max.bytes=5242880
# 设置副本个数为2
default.replication.factor=2
# 设置取消息的最大字节数为5M
replica.fetch.max.bytes=5242880
// 将kafka工作目录从hadoop-master1节点复制到hadoop-master2节点
$ cd ~/app/
$ scp-r kafka_2.11-0.10.0.0/ hadoop-master2:/home/hadoop/app/
// 在hadoop-master2节点的kafka配置文件server.properties中修改broker.id
$ cd app/kafka_2.11-0.10.0.0/config/
$ vim server.properties
broker.id=1
// 分别在hadoop-master1和hadoop-master2节点配置kafka环境变量
$ cd ~
$ vim .bash_profile
export KAFKA_HOME=/home/hadoop/app/kafka_2.11-0.10.0.0
export PATH=$PATH:$KAFKA_HOME/bin
$ source .bash_profile
// 分别在hadoop-master1和hadoop-master2节点启动服务
$ kafka-server-start.sh-daemon $KAFKA_HOME/config/server.properties
$ jps
5 功能测试// 创建topic,名称为test,只有1个副本和一个分区
$ kafka-topics.sh --create --zookeeperhadoop-slave1:2181 --replication-factor 1 --partitions 1 --topic test
// 查看topic
$ kafka-topics.sh --list --zookeeperhadoop-slave1:2181
$ kafka-topics.sh --describe--zookeeper hadoop-slave1:2181 --topic test
// 在hadoop-master2节点启动一个consumer
$ kafka-console-consumer.sh --zookeeperhadoop-slave1:2181 --topic test --from-beginning
// 在hadoop-master1节点启动一个producer并发送几条消息
$ kafka-console-producer.sh--broker-list localhost:9092 --topic test
// 在hadoop-master2节点查看是否消费者是否接收到消息
CentOS 7.2部署Elasticsearch+Kibana+Zookeeper+Kafka