分布式消息队列Kafka
Kafka概述
Apache Kafka®是一个分布式流平台。
流平台具有三个关键功能:
- 发布和订阅记录流,类似于消息队列或企业消息传递系统。
- 以容错的持久方式存储记录流
- 处理流
Kafka常用于两种应用程序:
- 建立实时流数据管道,以可靠地在系统或应用程序之间获取数据
- 构建实时流应用程序以转换或响应数据流
Kafka是采用scala语言开发,如kafka_2.11-0.9.0.0说明kafka版本是0.9.0.0,采用scala2.11开发
下载对应版本kafka,这里下载的是0.9.0.0,解压开,配置环境变量
export KAFKA_HOME=/home/hadoop/app/kafka_2.11-0.9.0.0
export PATH=$KAFKA_HOME/bin:$PATH
修改$Kafka_HOME/config/server.properties文件
## 修改broker.id 这个id要唯一
broker.id=0
listerers的端口号(如果是要配单机单broker 不需要修改端口号)
host.name(建议不要用localhost,如host.name=hadoop000)
log.dirs(默认存放在tmp目录下,需要修改,比如log.dirs=/home/hadoop/app/tmp/kafka-logs)
zookeeper.connect(默认是localhost:2181,可根据情况改为需要的地址如hadoop000:2181)
Kafka的启动需要依赖Zookeeper,因此前置条件是安装配置Zookeeper,因此Kafka启动前要保证Zookeeper启动
这里假设Zookeeper已经启动,接下来要启动Kafka了
bin/kafka-server-start.sh config/server.properties
创建topic
./bin/kafka-topics.sh --create --zookeeper hadoop000:2181 --topic test
查看所有创建的topic
./bin/kafka-topic.sh --list --zookeeper hadoop000:2181
查看具体的topic信息(不添加–topic 查看所有topic信息)
./bin/kafka-topic.sh --describe --zookeeper hadoop000:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
其中Replicas表示集群的数量 Isr表示集群中存活kafka实例的数量
使用kafka收发消息
### 启动生产者 向test消息队列发送消息
./kafka-console-producer.sh --broker-list hadoop000:9092 --topic test
## 启动消费者 消费test消息队列的消息
kafka-console-consumer.sh --bootstrap-server hadoop000:9092 --topic test --zookeeper hadoop000:2181 --from-beginning
注意:这里–from-beginning 表示每次启动消费者 就会把之前的消息重新消费一遍。要根据实际情况 选择是否需要带该属性
集群模式配置kafka
相较于单节点的配置,只需要把配置文件拷贝下,修改broker.id、listeners、log.dirs
zookeeper的配置不用改
## server-1.properties
...
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/home/kafka-logs-1
...
## server-2.properties
...
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/home/kafka-logs-2
...
启动时,分别启动(静默启动)
./kafka-server-start.sh -daemon ../config/server-1.properties &
./kafka-server-start.sh -daemon ../config/server-2.properties &
创建一个topic 并查看在集群中的情况
./kafka-topics.sh --create --zookeeper hadoop000:2181 --replication-factor 2 --partitions 1 --topic test2
./kafka-topics.sh --describe --zookeeper hadoop000:2181 --topic test2
Topic:test2 PartitionCount:1 ReplicationFactor:2 Configs:
Topic: test2 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
可以看出Replicas: 1,2 Isr: 1,2 表示集群成功