kafka 介绍和使用

Admin 2019-06-10 14:24:04 Linux服务

介绍

Apache Kafka是一个开源分布式发布-订阅消息系统,使用Scala编写。最初是LinkedIn公司开发,之后成为Apache项目。kafka是一种快速、可扩展的、分区的、可复制、分布式、多副本、多订阅者的日志服务,可以用于web日志、搜索日志、监控日志、访问日志等等。它提供了类似于JMS的特性,但设计实现完全不同。此外kafka对消息保存是根据Topic进行归类的。官网

特性

  • 高吞吐量、低延时:kafka每秒可以处理几十万条消息,延迟最低只有几毫秒

  • 可扩展性:集群支持热扩展

  • 持久性、可靠性:通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能,并支持数据备份防止丢失

  • 容错性:允许集群中节点失败(允许n-1节点失败)

  • 高并发:支持数千个客户端同时读写

应用场景

  • 日志收集:收集各种服务的log,通过kafka以统一接口服务的方式开发各种consumer

  • 消息系统:解耦和生产者和消费者、缓存消息

  • 活动跟踪:记录web用户或app用户的各种活动,如浏览、点击,这些活动记录到kafka的topic中,然后订阅topic来做实时的监控分析或做离线分析。

  • 运营指标:记录运营监控数据

核心组件

x.png

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组件,但依赖此组件

数据处理流程

  1. Producer产生数据,发送给Broker中

  2. Leader状态的Broker接收数据,写入到相应的topic中

  3. Leader状态的Broker接收完毕后,传给Follow状态的Broker作为副本备份

  4. 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的特性。

相关文章
最新推荐