1、kafka基本介绍
- Kafka:高吞吐量的分布式发布订阅消息系统
(1)kafka是一个消息中间件(一个对消息进行统一管理的中间件)
(2)kafka分布式集群,每台Kafka服务器内部维护着一个queue,MeaasgeQueue是一个共享资源(producer,consumer)
(3)kafka底层用scala实现的,每秒能够处理百万级的消息生产和消费
2、Kafka基本概念
(1)Broker
- 定位:kafka集群的服务端程序,一个MQ节点就是一个1Broker
- 作用:存储Topic数据
(2)Producer生产者
- 定位:创建消息Message,然后发布到MQ中
- 作用:将消息发送到Kafka集群中
(3)Consumer
- 作用:消费队列中的消息
(4)ConsumerGroup
- 定位:消费者组
- 作用:同个Topic,广播发送给不同的group,一个group自由一个Consumer1可以消费此消息
(5)Topic
- 定位:消息主题
- 作用:为发送到kafka集群中的消息进行分类
(6)Partition
- 定位:将每个Topic中的数据分割为一个或多个partition
- 作用:消息在集群中的物理存储
(7)Replication副本
- 定位:Partition的备份
- 作用:当其他broker挂掉之后,系统可以用副本提供服务
(8)ReplicationLeader
- 定位:partition数据交互
- 作用:leader负责的Partition和生产者消费者交互
(9)ReplicationFollower
- 定位:数据备份
- 作用:从ReplicationLeader进行同步,主从同步采用pull
(10)offset
- 定位:Consumer对分区的消息消费的定位
- 作用:kafka把offset保存在消费端的消费者组
3、典型集群架构
(1)集群架构
-
一个典型的kafka集群中包含
①若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU、memory等),
②若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),
③若干consumer group,
④一个Zookeeper集群。 -
运行方式:Kafka通过Zookeeper管理集群配置,选举leader,
①在consumer group发生变化时进行rebalance。
②producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。
-
Producer - 消息生产者
①在发送一条消息时,可以指定这条消息的 key,Producer 根据这个 key 和 Partition 机制来判断应该将这条消息发送到哪个 Parition。
②key 相同的消息会被发送并存储到同一个 partition 里,而且 key 的序号正好和 Partition 序号相同。 -
Broker - 服务器
Kafka集群包含一个或多个服务器,这种服务器被称为broker -
Consumer Group
①使用 Consumer high level API 时,同一Topic的一条消息只能被同一个 Consumer Group 内的一个 Consumer 消费,但多个 Consumer Group 可同时消费这一消息。
②可以使用 Storm 这种实时流处理系统对消息进行实时在线处理,同时使用 Hadoop 这种批处理系统进行离线处理,还可以同时将数据实时备份到另一个数据中心,只需要保证这三个操作所使用的 Consumer 属于不同的 Consumer Group 即可
- Topic - 逻辑分主题,用来区分具体业务
①Kafka数据写入操作的基本单元,每条消息属于且仅属于一个Topic
②Producer发布数据时,必须指定将该消息发布到哪个Topic
③Consumer订阅消息时,也必须指定订阅哪个Topic的信息
④一个Topic包含一个或多个Partition,建Topic的时候可以手动指定Partition个数
举例:创建 topic1 和 topic2 两个 topic,且分别有 13 个和 19 个分区,
则整个集群上会相应会生成共 32 个文件夹
(本文所用集群共 8 个节点,此处 topic1 和 topic2 replication-factor 均为 1)。
-
Partition - 包含一一对应的.index文件和.log文件
①每个Partition只会在一个Broker上,物理上每个Partition对应的是一个文件夹,默认采用哈希分区;
②partition目录名是topic的名称加上一个序号;
③Partition包含多个Segment,每个Segment对应一个文件,Segment可以手动指定大小,当Segment达到阈值时,将不再写数据,每个Segment都是大小相同的 -
Segment - 本质上为.log文件和.index文件
①**.log文件由多个不可变的记录组成,记录只会被append到Segment中,不会被单独删除或者修改,每个Segment中的Message数量不一定相等
②.index文件记录了元数据信息**,指向对应的数据文件中Message的物理偏移量 -
Message - 本质上是消息,包含三个属性
①offset对应类型Long,可认为是message在partition中的id
②Messagesize对应类型是int
③data是message的具体内容 -
Offset - 本质上为消息在log文件中的位置
①每条消息在log文件中的位置,是一个单调递增且不变的值
2.4、Kafka应用用场景
(1)指标分析
kafka 通常用于操作监控数据 , 这设计聚合来自分布式应用程序和统计信息 , 以产生操作的数据集中反馈
(2)日志聚合解决方法
kafka 可用于跨组织从多个服务器收集日志 , 并使他们一标准的合适提供给多个服务器
(3)流式处理
流式的处理框架 (spark, storm , flink) 从主题中读取数据 , 对其进行处理 , 并将处理后的结果数据写入新的主题, 供用户和应用程序使用 , kafka 的强耐久性在流处理的上下文中也非常的有用