Kafka学习(一)安装
简介
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
- 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
- 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
- 支持通过Kafka服务器和消费机集群来分区消息。
- 支持Hadoop并行数据加载。
准备
- jdk环境
- Zookeeper集群
- 下载Kafka安装包并解压
wget http://mirrors.hust.edu.cn/apache/kafka/1.1.0/kafka_2.12-1.1.0.tgz
tar -zvxf kafka_2.12-1.1.0.tgz
- 配置/etc/hosts文件
192.168.1.211 master
192.168.1.212 slave1
192.168.1.213 slave2
修改配置
进入Kafka的config目录,修改server.properties
- 修改broker.id
每个节点不一样
-打开监听端口
listeners=PLAINTEXT://hostname:9092(部署所在机器的hostname)
-修改log的目录
在Kafka的主目录下,创建logs文件夹mkdir logs
修改log目录
log.dirs=/home/kafka_2.12-1.1.0/logs
-配置Zookeeper连接信息
zookeeper.connect=192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181
启动
bin/kafka-server-start.sh config/server.properties &
Kafka常用命令
- 创建一个主题topic
bin/kafka-topics.sh --create --zookeeper 192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181 --replication-factor 3 --partitions 3 --topic HelloWorld
--zookeeper : zookeeper集群列表,用英文逗号分隔。可以不用指定zookeeper整个集群内的节点列表,只指定某个或某几个zookeeper节点列表也是可以的
--replication-factor : 复制数目,提供failover机制;1代表只在一个broker上有数据记录,一般值都大于1,代表一份数据会自动同步到其他的多个broker,防止某个broker宕机后数据丢失。
--partitions : 一个topic可以被切分成多个partitions。通过将topic的消息打散到多个分区并分布保存在不同的broker上实现了消息处理(不管是producer还是consumer)的高吞吐量。
- 查询主题列表
bin/kafka-topics.sh --list --zookeeper 192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181
-主题描述
bin/kafka-topics.sh --describe --zookeeper 192.168.1.201:2181,192.168.1.202:2181,192.168.1.203:2181 --topic HelloWorld
-发布消息到指定的主题
bin/kafka-console-producer.sh --broker-list master:9092,slave1:9092,slave2:9092 --topic HelloWorld
-消费指定的主题的消息
bin/kafka-console-consumer.sh --bootstrap-server master:9092,slave1:9092,slave2:9092 --from-beginning --topic HelloWorld
组内分区分配
consumer group下有两个consumer: A和B,当第三个成员加入时,kafka会触发rebalance并根据默认的分配策略重新为A、B和C分配分区,如下图所示:
topicA-0 表示主题A的一个标识为“0”的切片