0. 概念 0.1 消息系统
消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,而不用担心怎么去共享它。
1)点对点消息系统:消息被保留在队列中,一个或多个消费者可以消耗队列中的消息,但是特定的消息只能由一个消费者消费,一旦消费掉了,消息就会从队列中消失。
2)发布-订阅 消息系统消息被保留在主题中,与点对点的系统不同,消费者可以订阅一个或多个主题,并使用该主题中的所有消息
0.2 LinkedIn开源 1)Databus 分布式数据同步系统 2)Cubert 高性能计算引擎 3)ParSeq Java一部处理框架 4)kafka 流处理平台 1. kafka介绍 1.1 kafka工作流程 1.1.1 发布-订阅工作流程 1)生产者定期向主题发送消息 2)kafka代理存储为该特定主题的分区中的所有消息,它确保消息在分区之间的平等共享 3)消费者订阅特定的消息 4)一旦消费者订阅了相应的主题,kafka将会向消费者提供主题的当前便宜,并且还将保存在zookeeper中 5)消费者将定期请求kafka的新消息 6)一旦kafka收到来自生产者的消息,它将这些消息转发给消费者 7)消费者将接受这些消息并且进行处理 8)一旦消息被处理了,消费者将向kafka代理发送确认 9)一旦kafka收到确认,它将便宜改为新值,并在zookeeper中更新它 10)以上流程将重复,直到消费者停止请求 11)消费者可以随时退回/跳到所需要的主题的偏移量,并阅读所有后续的消息 1.1.2 队列消息/用户组的工作流在队列消息传递系统而不是单个消费者中,具有相同的"组ID"的一组消费者将订阅主题。简单来说,订阅具有相同groupid的主题的消费者被认为是单个组,并且消息在他们之中共享。一下为工作流程“
1)生产者以固定间隔向某个主题发送消息 2)Kafka存储在为该特定主题配置的分区中的所有消息,类似于前面的方案 3)单个消费者订阅特定主题, 4)kafka以发布-订阅消息的方式同消费者交互,知道新的消费者以相同的组id订阅相同的主题topic 5)一旦新的消费者到达,kafka将其操作切换为共享模式,并在两个消费者之间共享数据 6)一旦消费者数量超过分区数量,新消费者将不会接收到任何进一步消息,知道现有的消费者取消订阅,出现这种情况是因为kafka中的每个消费者将被分配到至少一个分区,一旦所有分区都被分配给消费者之后,新的消费者必须等待 1.2 kafka 官方介绍是一个分布式流处理平台
1.3 基本概念 1)Producer:消息和数据的生产者,向kafka的一个topic发布消息的进程/代码/服务 2)Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务 3)Consumer Group:一个group只有一个consumer能消费这个订阅的消息 4)Broker:kafka集群中的每个kafka节点 5)Topic:消息的类别,对数据进行区分、隔离 6)Partition:一个Topic下的数据分散存储在多个Partition上,Partition是有序的 每个Topic被切分为多个partitions 消费者数目少于或等于Partition的数目 broker group中的每个brioker保存topic的一个或多个partition,同一个partition不会被多个几次保存在多个broker上 consumergroup中的仅有一个consumer读取topic的一个或多个partitions,并且是唯一的consumer 7)Partition offset 每个分区消息具有称为 offset 的唯一序列标识 8)Replication:一个partition可能有多个副本 当集群中有broker挂掉的情况下,系统可以主动使用replicas提供服务 系统默认设置每个topic的replication系数为1,可以创建topic时单独设置 replication的剧本单位是topic的partition 所有的读和写都是从leader进,followers只是为了做备份 followers必须能够即使复制leader的数据 增加容错性与可扩展性 9)Replication Leader:负责该partition与consumer的交互 10)ReplicaManager:负责管理当前的broker所有分区和副本的信息,处理kafkaController发起的一些请求,副本状态的切换、添加、读取消息等 1.4 kafka消息结构offset|length|crc32|magic|attributes|timestamp|key length|key|value length|value
1.5 api分类 Producer Api Consumer Api Streams Api Connectors Api 1.6 kafka特点 1)分布式:多分区,多副本,多订阅者,基于zookeeper调度(记录broker、topic、partition信息) 2)高性能:高吞吐量、低延迟、高并发、时间复杂度为O(1) 3)持久性与扩展性:数据可持久化、容错性、支持在线水平扩展、消息自动平衡(避免数据集中在某几台机器上导致频繁地访问某几台机器,产生一种热点的问题)