1、Kafka基本概念及专业术语介绍

1、Kafka基本概念及专业术语介绍

1. Kafka介绍

Kafka是最初由Linkedin公司开发,是一个分布式,支持分区的(parition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

2. Kafka的使用场景

  • 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例hadoop、Hbase、Solr等, 消息系统:解耦和生产者和消费者、缓存消息等。
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网币,搜索,点击等活动。这些活动信息被各个服务器发布到kafka的lopic中,然后订阅者通讨订阅这些topic 来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘,
  • 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

1、Kafka基本概念及专业术语介绍_第1张图片

3. Kafka基本概念

kafka是一个分布式的,分区的消息服务。它提供一个消息系统应该具备的功能,但是有着独特的设计。Kafka借鉴了JMS规范的思想,但并没有完全遵循JMS规范。

相关术语

  • Broker:消息中间件处理节点,一个Kafka节点就是一个broker,两个或多个可以组成一个Kafka集群。
  • Topic:Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic。
  • Producer:消费生产者,向Broker发送消息的客户端。
  • Consumer:消费者,从Broker读取消息的客户端。
  • ConsumerGroup:每个Consumer属于一个特定的Consumer Group,一条消息可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息。
  • Partition:物理上的概念,一个topic可以分多个partition存储,每个partition内部的消息是有序的。

Producer 通过网络发送消息到Kafka集群,然后Consumer进行消费,如下图:

1、Kafka基本概念及专业术语介绍_第2张图片

3.1 主题 Topic

Topic 是一个类别的名称,同类消息发送到同一个Topic,可以有多个分区Partition日志文件:

1、Kafka基本概念及专业术语介绍_第3张图片

Partition是一个有序的message序列,这些message按顺序添加到一个叫做commit log的文件中。每个partition中的消息都有一个唯一的编号,称之为offset,用来唯一标示某个分区中的 message。

每个partition,都对应一个commit log文件。一个partition中的message的offset都是唯一的,但是不同的partition中的message的offset可能是相同的。

kafka一般不会删除消息,不管这些消息有没有被消费。只会根据配置的日志保留时间(log.retention.hours)确认消息多久被蒯除,默认保留最近一周的目志消息,kafka的性能与保留的消息数据量大小没有关系,因此保存大量的数据消息日志信息不会有什么影响。

每个consumer是基于自己在commit log中的消费进度(offset)来进行工作的。在kafka中,消费offset由consumer自己来维护:一般情况下我们按照顺序逐条消费commit loo中的消息,当然我可以通过指定offset来重复消费某些消息,或者跳过某些消息。 这意味kafka中的consumer对集群的影响是非常小的,添加一个或者减少一个consumer,对于集群或者其他consumer来说,都是没有影响的,因为每个consumer维护各自的消费offset。

查看topic的情况

bin/kafka-topics.sh --describe --zookeeper ip:端口 --topic 主题名字

结果如下:

在这里插入图片描述

第一行是所有分区的概要信息,之后每一行表示每一个partition的信息。

  • leader 节点负责patition的所有读写请求,其他节点没有。
  • replicas 表示某个patition在那几个broker上存在备份。不管节点是不是“leader”,甚至节点挂了,也会列出。
  • isr 是replicas的子集,它列出当前存活着的,并且已同步备份了改patition的节点。

总结

一个topic,代表逻辑上的一个业务数据集,也可以理解为消息的一个分类,比如按数据库里不同表的数据操作消息区分放入不同topic,订单相关操作消息放入订单topic,用户相关操作消息放入用户topic,若是大型网站,后端数据是海量的,订单消息很有可能是非常巨大,比如有几百G甚至达到TB级别,如果把这么多数据放在一台机器上肯定会有容量限制的问题,那么就可以在topic内部划分多个partition来分片存储数据,不同的partition可以位于不同的机器上,每台机器上都运行一个kafka的进程Broker。

为什么要对Topic下数据进行分区存储?

1、commit log 文件会受到所在机器的文件系统大小限制,分区之后可以将不同分区放在不同的机器上,相当于对数据做了分布式存储,理论上一个topic可以处理任意数量的数据。

2、为了提高并行度。

你可能感兴趣的:(MQ,kafka,大数据,分布式)