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的设置