Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka。在本文中,我们将搭建一个Kafka的本地环境,并通过它来尝试使用Spring Cloud Bus对Kafka的支持,实现消息总线的功能。
Kafka是一个由LinkedIn开发的分布式消息系统,它于2011年初开源,现在由著名的Apache基金会维护与开发。Kafka使用Scala实现,被用作LinkedIn的活动流和运营数据处理的管道,现在也被诸多互联网企业广泛地用作为数据流管道和消息系统。
Spring Cloud Bus使用 - Kafka:
Kafka是基于消息发布/订阅模式实现的消息系统,其主要设计目标如下:
•消息持久化:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
•高吞吐:在廉价的商用机器上也能支持单机每秒100K条以上的吞吐量
•分布式:支持消息分区以及分布式消费,并保证分区内的消息顺序
•跨平台:支持不同技术平台的客户端(如:Java、PHP、Python等)
•实时性:支持实时数据处理和离线数据处理
•伸缩性:支持水平扩展
•Broker:Kafka集群包含一个或多个服务器,这些服务器被称为Broker。
•Topic:逻辑上同Rabbit的Queue队列相似,每条发布到Kafka集群的消息都必须有一个Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个Broker上,但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
•Partition:Partition是物理概念上的分区,为了提供系统吞吐率,在物理上每个Topic会分成一个或多个Partition,每个Partition对应一个文件夹(存储对应分区的消息内容和索引文件)。
•Producer/ Consumer 消息生产/消费者,负责生产消息并发送到Kafka Broker,向Kafka Broker读取消息并处理
•Consumer Group:每个Consumer属于一个特定的组(可为每个Consumer指定属于一个组,若不指定则属于默认组),组可以用来实现一条消息被组内多个成员消费等功能。
下载安装Kafka:(安装kafka需要依赖zookeeper)
•kafka下载地址:http://kafka.apache.org/downloads.html
•解压命令:tar -zxvf kafka_2.11-0.10.1.1.tgz -C /usr/local
•改名命令:mv kafka_2.11-0.10.1.1/ kafka
•进入解压后的目录,修改server.properties文件:
•vim /usr/local/kafka/config/server.properties
修改内容:
•broker.id=0
•port=9092
•host.name=192.168.11.114
•advertised.host.name=192.168.11.114
•log.dirs=/usr/local/kafka/kafka-logs
•num.partitions=2
•zookeeper.connect=192.168.11.114:2181,192.168.11.115:2181,192.168.11.116:2181
•建立日志文件夹:mkdir /usr/local/kafka/kafka-logs
•启动kafka:/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties &
Spring Cloud Bus使用 – Kafka Manager 安装:
•下载kafka-manager-1.0-SNAPSHOT.zip
•解压:unzip kafka-manager-1.0-SNAPSHOT.zip -d /usr/local/
•改名:mv kafka-manager-1.0-SNAPSHOT/ kafka-manager-1.0
•编辑文件:vim /usr/local/kafka-manager-1.0/conf/application.conf
•修改内容
•kafka-manager.zkhosts="192.168.11.114:2181,192.168.11.115:2181,192.168.11.116:2181"
•r/local/kafka/config/server.properties &
启动kafka-manager:
•nohup /usr/local/kafka-manager-1.0/bin/kafka-manager -Dconfig.file=/usr/local/kafka-manager-1.0/conf/application.conf >/dev/null 2>&1 &
•默认端口为:9000
Spring Cloud Bus使用 – Kafka 命令行使用:
•Kafka的shell脚本都在bin目录下。Shell使用请参考博客地址:
•http://www.cnblogs.com/xiaodf/p/6093261.html
•比如创建主题:
•(1)创建topic主题命令:kafka-topics.sh --zookeeper 192.168.11.111:2181 --create --topic test --partitions 1 --replication-factor 1 (创建名为test的topic, 1个分区分别存放数据,数据备份总共1份)
•查看主题列表:
•(2)查看topic列表命令:kafka-topics.sh --zookeeper 192.168.11.111:2181 –list
•生产与消费消息:
•3)kafka命令发送数据:kafka-console-producer.sh --broker-list 192.168.11.51:9092 --topic test (然后我们就可以编写数据发送出去了)
•(4)kafka命令接受数据:kafka-console-consumer.sh --zookeeper 192.168.11.111:2181 --topic test (然后我们就可以看到消费的信息了)
安装配置kafka:
1.下载完成解压到server目录:
2.修改名称:
3.修改配置文件:vim /kafka/config/server.properties
【日志目录创建一个】
4.启动kafka:
5.启动kafka之后,测试是否成功。
创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
生产者生产消息:
[apps@erp-computation-4 kafka_2.11-1.1.0]$ bin/kafka-console-producer.sh --broker-list 10.17.156.8:9092 --topic test
my name is xiaoqiang
消费者消费消息:
[apps@erp-computation-4 kafka_2.11-1.1.0]$ bin/kafka-console-consumer.sh --bootstrap-server 10.17.156.8:9092 --topic test --from-beginning
my name is xiaoqiang
至此,kafka启动完成,正常使用。 ctrl+c,关掉Xshell窗口,专心码代码。测试应用的时候发现,一堆报错全部指向连不上kafka。再战kafka服务器,发现kafka进程已不在。
6.连接zookeeper查看kafka是否注册:
7.安装kafka-manager:(此处直接安装编译后版本:请在CSDN搜索最新编译版)
解压、改名
8.修改配置文件:
【添加zookeeper节点】
启动kafka-manager:
•nohup /usr/local/kafka-manager-1.0/bin/kafka-manager -Dconfig.file=/usr/local/kafka-manager-1.0/conf/application.conf >/dev/null 2>&1 &
9.连接zookeeper查看kafka-manager是否注册:
10.访问kafka-manager:浏览器访问192.168.1.11:9000