1. kafka——拥有更广阔的大海
Kafka 起初是由 Linkedin 公司采用 Scala 语言开发的 一个多分区、多副本且基于 ZooKeeper协调的分布式消息系统。不过kafka不只是一个简单的mq,在大数据领域也是重要的玩家,现在已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera 、 Storm、 Spark、 Flink 等都支持与 Kafka 集成 。
Kafka 之所以受到越来越多的青睐,与它所“扮演 ”的三大角色是分不开的 :
- 消息系统: Kafka 和传统的消息系统(也称作消息中间件〉都具备系统解稿、冗余存储、流量削峰、缓冲、异步通信、扩展性、 可恢复性等功能。与此同时, Kafka 还提供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能 。
- 存储系统: Kafka 把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险 。 也正是得益于 Kafka 的消息持久化功能和多副本机制,我们可以把 Kafka 作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置为“永久”或启用主题的日志压缩功能即可 。
- 流式处理平台: Kafka 不仅为每个流行的流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理类库,比如窗口、连接、变换和聚合等各类操作 。
普通后台系统中,我们见到最多的是基于ES,Lucene一起构建日志分析系统ELK。
2. 安装与测试
2.1 kafka为什么需要zk
kafka必须要有一个ZK服务,在生产环境下也需要为zk搭建一个集群,ZK做什么呢?
利用ZK的有序节点,临时节点和监听机制,ZK帮助kafka做了这些事情:
配置中心(管理Broker,Topic,Partition,Consumer的信息,包括元数据的变动),负载均衡,命名服务,分布式通知,集群管理和选举,分布式锁。
2.2 安装和测试步骤
与RabbitMQ相比,kafka的安装稍微复杂一些,这里我们在centos虚拟机里搭建。
从这里下载http://kafka.apache.org/downloads
也可以使用命令:
cd /usr/local/soft
wget https://mirror.bit.edu.cn/apache/kafka/2.5.0/kafka_2.13-2.5.0.tgz
tar -xzvf kafka_2.13-2.5.0.tgz
cd kafka_2.13-2.5.0
下载之后,我们可以看到bin目录下提供了很多脚本供我们使用:
3.1 启动zookeeper
kafka需要依赖ZK,安装包中已经自带了一个ZK,也可以改成指定已运行的ZK。
如果改成指定的ZK需要修改修改 kafka 安装目录下的 config/server.properties 文件中的 zookeeper.connect 。这里使用自带的ZK。
后台启动ZK:
nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties >> zookeeper.nohup &
检查zookeeper是否启动成功:
ps -ef|grep zookeeper
3.2 启动kafka
修改相关配置:
vim config/server.properties
Broker ID启动以后就不能改了:
broker.id=1
取消注释,改成本机IP:
listeners=PLAINTEXT://192.168.3.128:9092
num.partitions后面增加2行。
发送到不存在topic自动创建。允许永久删除topic。
num.partitions=1
auto.create.topics.enable=true
delete.topic.enable=true
后台启动kafka(kafka安装目录下):
注意这里注意不要到bin目录下直接执行脚本,因为脚本还需要加载配置文件,或者你修改下面的命令
nohup ./bin/kafka-server-start.sh ./config/server.properties &
3.3 测试
1.创建Topic:
创建一个名为lqctest的topic,只有一个副本,一个分区:
sh bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic lqctest
查看已经创建的 topic:
sh bin/kafka-topics.sh -list -zookeeper localhost:2181
2.启动Producer:
打开一个窗口,在kafka解压目录下:
sh bin/kafka-console-producer.sh --broker-list localhost:9092 --topic gptest
3.启动Consumer:
sh bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic lqctest --from-beginning
此时在producer窗口输入字符串,消费者窗口就能看到了。