加关键词的网站,北京公司摇号,网站线框图,专业房地产网站建设Kafka 人们通常有时会将 Kafka 中的 Topic 比作队列#xff1b; 在 Kafka 中#xff0c;数据是以主题#xff08;Topic#xff09;的形式组织的#xff0c;每个 Topic 可以被分为多个分区#xff08;Partition#xff09;。每个 Partition 是一个有序的、不可变的消息…Kafka 人们通常有时会将 Kafka 中的 Topic 比作队列 在 Kafka 中数据是以主题Topic的形式组织的每个 Topic 可以被分为多个分区Partition。每个 Partition 是一个有序的、不可变的消息序列这与队列的概念有些相似。 组件
一、Producer生产者 Kafka 为了提升消息发送速率生产者默认采用批量发送的方式发送消息至 Broker 一条发送多少条由参数 batch.size 决定默认16K 产生消息并将其发送给消息代理的应用程序或服务。生产者创建消息并将它们放入特定的消息队列或主题中。生产者是创建并发送消息的实体。它可以是一个应用程序、服务或进程。 二、Broker服务器 Broker 就是 kafka 的服务器用于存储和管理消息默认端口是9092 生产者和 Broker 建立连接将消息发送到服务器上存储起来 消费者跟 Broke r建立连接订阅和消费服务器上存储的消息 消息处理中心。消息队列系统的核心组件负责接收、存储和转发消息。消息代理充当生产者和消费者之间的中介确保消息能够从一个地方安全的传输到另一个地方。 三、Consumer消费者 订阅接收消息的一方叫消费者 消费者获取消息有两种模式Pull模式拉消费者主动从消息队列中获取消息Push模式推Broker 把消息推送给消费者 Kafka 采用的是 Pull 模式因为 Kafka 是支持大数据的如果采用 Push 模式的话海量数据可能把下游消费端给打爆所以 Kafka 采用 Pull 模式推送消息 Pull 模式消费者可以控制一次到底获取多少条消息max.pull.records 默认是500。 四、Record消息 客服端传输的数据叫做消息在 Kafka 中也叫 Record Record 在客户端是一个 KV 键值对ProducerRecordConsumerRecord Record 在服务端是一个 KV 键值对RecordBatch批量发送或 Record。 实际的数据单位可以是任何类型的信息如文本、图片等。 Topic主题 Topic 一个逻辑概念可以理解为一组消息的集合 生产者和消费者通过 topic 进行消息的写入和读取 生产者发送消息时若 topic 不存在是否自动创建auto.create.topics.enable建议关闭 某些消息队列系统支持 发布/订阅 模型在这种情况下消息会被发送到一个主题而不是直接到队列。多个消费者可以订阅同一个主题以接收该主题下的所有消息。 Partition分区 就是把一个topic分成几个不同的部分 一个topic在创建时可以划分多个分区若没有指定默认分区数为1可通过参数修改num.partitions Kafka 中修改分区规则可加不可减。 Replica副本机制 和分区结合起来是Kafka实现高可用和负载均衡的原理 Replica副本是 Partition分区的副本每个分区可以有若干个副本但是不能超过集群数量 副本必须在不同的Broker上副本包括了主从节点LeaderFoller 服务端可以通过参数控制默认副本数offsets.topic.replication.factor一般不这样用一般直接通过命令设置副本数 生产者只会往 leader 节点发送消息消费者也只会从 leader 节点读取消息。 Segment段
Kafka 的数据文件是写在 .log 文件里面的另外一起还生成对应的索引 .index 文件和对应的时间 .timeIndex 文件
但是很容易的可以理解如果一直往一个log文件里面追加数据那么长时间使用之后log文件的查找会随着数据量变大而变慢所以在这种情况下就引入了 Segment段 的概念
Segment 的目的是建一个分区的数据划分、存储到不同的文件中
每个 Segment 至少由一个数据文件和2个索引文件构成3个文件是成套出现的
引入段的意义加快查询效率、删除数据时减少逐条IO
Segement 大小控制按时间周期生成 log.roll.hours默认一周、按文件大小生产 log.segment.bytes默认1G。
Consumer Group消费者组 由于生产者可能短时间内生产大量消息为了提升消息的消费速率就增加了消费者组的概念group id 使用消费者组提升消费效率和吞吐量 同一个 Group 中的消费者不能消费相同的分区group id 相同在一个组内。负载均衡 在同一个消费者组内的消费者会自动分配主题中的分区。如果消费者的数量小于或等于主题的分区数那么每个消费者将被分配到一个或多个分区如果消费者的数量超过了分区的数量那么多余的消费者将处于空闲状态不会接受任何消息高可用性和容错性 如果某个消费者失败了或者停止运行它的分区会被重新分配给组内的其它活跃消费者确保消息继续被处理这被称为再平衡再平衡机制保证了即使有消费者假如或离开整个组仍然能够持续稳定的消费消息并行处理 通过增加同一消费者组中的消费者数量可以提高对消息的并行处理能力。但是最大并行度受限于主题的分区数因为每个分区只能由一个消费者消费 消费进度跟踪 每个消费者组维护自己的消费偏移量Offset记录已经消费过的消息位置。kafka默认会定期提交这些偏移量以确保在消费者重启后可以从上次的位置继续消费 独立消费流 不同的消费者组可以独立的消费相同主题的消息而不会相互影响。这意味着一个主题的消息可以被多个不同的应用或服务同时消费。 Consumer Offset偏移量Kafka单分区消息顺序消费的原因 Kafka 在单分区里面的消息是顺序存储的 Offset偏移量的目的在于记录消费者的消费位置 Kafka 现行版本将 Offset 保存在服务器__consumer_offsets_主题中0.9版本以前是在zooKeeper中 队列存储消息的地方直到它们被消费者获取在某些情况下队列可以设置为持久化以确保即使在系统故障后消息也不会丢失