介绍
Apache Kafka是一个开源分布式发布-订阅消息系统,使用Scala编写。最初是LinkedIn公司开发,之后成为Apache项目。kafka是一种快速、可扩展的、分区的、可复制、分布式、多副本、多订阅者的日志服务,可以用于web日志、搜索日志、监控日志、访问日志等等。它提供了类似于JMS的特性,但设计实现完全不同。此外kafka对消息保存是根据Topic进行归类的。官网
特性
应用场景
核心组件
Producer:消息生产者,产生的消息会发送给某个topic
Consumer:消息消费者,消费某个topic里的内容
Topic:消息根据topic进行分类,topic其本质是一个目录
Broker:每一个kafka实例就是一个broker,一个broker可以有多个topic
Consumer Group:实现一个topic消息广播,一个topic可以有多个CG,可以自由的分组而不用多次发送消息给不同的topic
Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序
Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka
Zookeeper:不是kafka组件,但依赖此组件
数据处理流程
Producer产生数据,发送给Broker中
Leader状态的Broker接收数据,写入到相应的topic中
Leader状态的Broker接收完毕后,传给Follow状态的Broker作为副本备份
Consumer消费Broker中的数据
安装
下载地址:http://mirrors.shuosc.org/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz
tar -xvf kafka_2.11-1.0.0.tgz
cd kafka_2.11-1.0.0/
./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties #启动zk
./bin/kafka-server-start.sh config/server.properties #启动kafka
测试使用
创建topic
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
副本 --replication-factor 1
分区 --partitions 3
查看topic列表
./bin/kafka-topics.sh --list --zookeeper localhost:2181
产生消息
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>hello world!
>hello kafka!
>hello test!
>hello done!
消费消息
./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
hello world!
hello kafka!
hello test!
hello done!
# 或
# ./bin/kafka-console-consumer.sh --bootstrap-server=127.0.0.1:9092 --topic test --from-beginning
查看topic信息
./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
总结
此处只是对kafka的简要介绍使用,后续在更加深入去学习使用kafka的特性。