学习kafka
Apache Kafka是由Apache软件基金会开发的一个开源消息中间件项目,由Scala写成。 Kafka是一种分布式的,基于发布/订阅的消息系统。
1.环境部署(mac 单机模拟)
1.1.配置java环境
- 下载mac-jdk1.8安装
下载mac dmg格式,下载后安装
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
在/etc/profile中配置环境变量
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home export CLASS_PATH=$JAVA_HOME/lib export PATH=$PATH:$JAVA_HOME/bin
1.2.配置kafka
mkdir -p /opt/environment/
cd /opt/environment
wget http://mirrors.hust.edu.cn/apache/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz
tar -zxvf kafka_2.11-0.10.1.0.tgz
cd kafka_2.11-0.10.1.0
1.3.构建单个kafaka-server
启动zookeeper,默认监听端口2181
bin/zookeeper-server-start.sh config/zookeeper.properties
启动kafka-server,默认监听端口9092
bin/kafka-server-start.sh config/server.properties
1.4.构建多个kafka-server
启动zookeeper,默认监听端口2181
bin/zookeeper-server-start.sh config/zookeeper.properties
配置多个kafka-server启动,默认监听端口9092,9093,9094
cp server.properties server.properties1 cp server.properties server.properties2 //修改server.properties1 broker.id=1 listeners=PLAINTEXT://localhost:9093 log.dirs=/tmp/kafka-logs-1 //修改server.properties2 broker.id=2 listeners=PLAINTEXT://localhost:9094 log.dirs=/tmp/kafka-logs-2 bin/kafka-server-start.sh config/server.properties bin/kafka-server-start.sh config/server.properties1 bin/kafka-server-start.sh config/server.properties2
1.5.测试
创建topic
//如果只开启单个服务,指定--replication-factor为1,--partitions指定分区个数 bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello //如果开启了多个,指定--replication-factor为合理数值,进行备份。 bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic hello
查看topic列表
bin/kafka-topics.sh --list --zookeeper localhost:2181
查看topic
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello
生产者发送信息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello
消费者接收打印
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic hello --from-beginning //--from-beginning参数显示所有消息
2.特性
- 为发布和订阅提供高吞吐量
- 消息持久化到硬盘,用于批量消费。
- 支持多订阅者,失败时自动平衡消费者。
3.架构
- 话题(topic)
- 生产者(consumer)
- 消费者(Producer)
- 代理(Broker)或者kafka集群
- 分区(partition)
- 备份(replicationFactor)
4.支持模型
- 点到分发模型:多个消费者共同消费队列中某个消息的副本
- 发布-订阅模式:多个消费者接收自己的消费副本
5.备份策略
topic 创建时指定 replication-factor个数,replication-factor的个数必须等于或着小于broker的个数。
- 假设目前开启了broker.id为: 0 1 2 三个服务。如果此时创建topic,指定3个replication-factor,repicas为0,1,2。
- 如果此时添加broker.id为 3 的服务,创建topic,指定3个replication-factor,replicas是随机的3个。
- topic创建时会指定一个broker为leader,其他为follower。如果leader宕机,会从follower中选取新的leader。即使服务回复,leader也不会变更。
- 消息只会下发到leader,follower从leader中同步数据,实现备份。 ##6.分区策略(partition) partition的设置