一、kafka的介绍
1、kafka的概述
- kafka最初是由Linkedin开发的一个机遇发布订阅的分布式的消息系统,由scala/java编写,并与2011年初开源
- kafka是一个分布式消息队列:具有生产者、消费者的功能。它提供了类似与JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现
- kafka对消息保存时根据Topic进行归类,发布消息的称为producer,消息的接受者称为consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker.
- 无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存溢写meta信息,来保证系统可用性。
2、kafka的特性
- 高吞吐量、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个 topic
- 可以分多个 partition,consumer group 对 partition 进行消费操作 可扩展性:kafka 集群支持热扩展
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为 n,则允许 n-1 个节点失败)
- 高并发:支持数千个客户端同时
二、kafka的应用场景
1、消息系统
- Kafka 很好地替代了传统的 message broker(消息代理)。Message Brokers 可用于各种场合(如将数据生成器与数据处理解耦,缓冲未处理的消息等)。与大多数消息系统相比,Kafka 拥有更好的吞吐量、内置分区、具有复制和容错的功能,这使它成为一个非常理想的大型消息处 理应用。
2、跟踪网站活动
Kafka 的初始用例是将用户活动跟踪管道重建为一组实时发布-订阅源。这意味着网站动
(浏览网页、搜索或其他的用户操作)将被发布到中心 topic,其中每个活动类型有一个topic。这些订阅源提供一系列用例,包括实时处理、实时监视、对加载到 Hadoop 或线数据仓库系统的数据进行离线处理和报告等。每个用户浏览网页时都生成了许多活动息,因此活动跟踪的数据量通常非常大
3、运营指标
Kafka 也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告
4、日志聚合
许多人使用 Kafka 来替代日志聚合解决方案。日志聚合系统通常从服务器收集物理日志文件,并将其置于一个中心系统(可能是文件服务器或 HDFS)进行处理。Kafka 从些日志文件中提取信息,并将其抽象为一个更加清晰的消息流。这样可以实现更低的延迟处理且易于支持多个数据源及分布式数据的消耗。
5、采集日志
Event Sourcing 是一种应用程序设计风格,按时间来记录状态的更改。Kafka 可以存储非常多的日志数据,为基于 Event Sourcing 的应用程序提供强有力的支持
三、kafka核心组件
1、kafka核心组件概述
Kafka 是 LinkedIn 用于日志处理的分布式消息队列,同时支持离线和在线日志处理。
Kafka 对消息保存时根据 Topic 进行归类:
- 发送消息者就是 Producer,消息的发布描述为 Producer
- 消息接受者就是 Consumer,消息的订阅描述为 Consumer
- 每个 Kafka 实例称为 Broker,将中间的存储阵列称作 Broker(代理)
Kafka 的大致工作模式:
1、启动 ZooKeeper 的 server
2、启动 Kafka 的 server
3、Producer 生产数据,然后通过 ZooKeeper 找到 Broker,再将数据 push 到 Broker 保存
4、Consumer 通过 ZooKeeper 找到 Broker,然后再主动 pull 数据
2、Kafka 拓扑结构
3、Kafka 的核心概念详解
Producer : 生产 message 发送到 topic
Consumer : 订阅 topic 消费 message,consumer 作为一个线程来消费
Consumer Group:一个 Consumer Group 包含多个 consumer,这个是预先在配置文件中配置好的
Broker:Kafka 节点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka 集群。
Topic:一类消息,消息存放的目录即主题,例如 page view 日志、click 日志等都可以以 topic的形式存在,Kafka 集群能够同时负责多个 topic 的分发。
Partition:topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是个有序的队列
Segment:partition 物理上由多个 segment 组成,每个 Segment 存着 message 信息
4、kafka的真正用处
为流式处理应用平台提供数据流的聚合和分类支撑
聚合:所有的数据收集程序都可以把数据收集到kafka
分类:最终kafka所接收到的所有数据,都会按照topic进行分类存储。
特点:缓冲,数据持久保存
在消费的时候,可以进行限流
分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset(偏移量),offset用来唯一的标识分区中每一条记录。
四、kafka的shell命令
1.创建topics
kafka-topics.sh \
--create \
--zookeeper qyl01:2181,qyl02:2181,qyl03:2181 \
--replication-factor 3 \
--partitions 10 \
--topic kafka_test
2、查看已经创建的所有的kafka topic
kafka-topics.sh \
--list \
--zookeeper qyl01:2181,qyl02:2181,qyl03:2181
3、查看指定的kafka topic的详细信息
kafka-topics.sh \
--zookeeper qyl01:2181,qyl02:2181,qyl03:2181 \
--describe \
--topic kafka_test
4、开启生产者模拟生产数据
kafka-console-producer.sh \
--broker-list qyl01:9092,qyl02:9092,qyl03:9092,qyl04:9092 \
--topic kafka_test
5、开启消费者模拟消费数据
kafka-console-consumer.sh \
--zookeeper qyl01:2181,qyl02:2181,qyl03:2181 \
--from-beginning \
--topic kafka_test
6、查看某个分区的偏移量的最大值和最小值
kafka-run-class.sh \
kafka.tools.GetOffsetShell \
--topic kafka_test \
--time -1 \
--broker-list qyl01:9092,qyl02:9092,qyl03:9092,qyl04:9092 \
--partitions 1
7、增加topic分区数
kafka-topics.sh \
--alter \
--zookeeper qyl01:2181,qyl02:2181,qyl03:2181 \
--topic kafka_test \
--partitions 20
8、删除topic
kafka-topics.sh \
--delete \
--zookeeper qyl01:2181,qyl02:2181,qyl03:2181 \
--topic kafka_test