admin 管理员组文章数量: 1087139
2024年6月12日发(作者:linux找回误删的文件)
—————————————————————————————
尚硅谷大数据技术之Kafka
第3章 Kafka工作流程分析
Kafka集群管理消息
消费者消费消息
Kafka核心组成
Kafka Cluster
Broker1
message
from A-0
生产者生产消息
message to A-0
Topic A
Partition 0
Leader
ReplicationA/0
Topic A
Partition 1
Follower
ReplicationA/1
Broker2
Consumer A
Zookeeper
注册消息
Producer A
message to A-1
Consumer group
Zookeeper
message
from A-1
Topic A
Partition 0
Follower
message to B-0
Partition0
message0
Topic A
Partition 1
Leader
Consumer B
Broker3
message1
message
from B-0
Producer BConsumer C
3.1 Kafka生产过程分析
3.1.1 写入方式
producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分
区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。
3.1.2 分区(Partition)
消息发送时都被发送到一个topic,其本质就是一个目录,而topic是由一些Partition
Logs(分区日志)组成,其组织结构如下图所示:
更多Java –大数据 –前端 –python人工智能资料下载,可百度访问:尚硅谷官网
—————————————————————————————
尚硅谷大数据技术之Kafka
我们可以看到,每个Partition中的消息都是有序的,生产的消息被不断追加到Partition
log上,其中的每一个消息都被赋予了一个唯一的offset值。
1)分区的原因
(1)方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个
topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;
(2)可以提高并发,因为可以以Partition为单位读写了。
2)分区的原则
(1)指定了patition,则直接使用;
(2)未指定patition但指定key,通过对key的value进行hash出一个patition
(3)patition和key都未指定,使用轮询选出一个patition。
DefaultPartitioner类
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[]
valueBytes, Cluster cluster) {
List
int numPartitions = ();
if (keyBytes == null) {
int nextValue = nextValue(topic);
List
blePartitionsForTopic(topic);
if (() > 0) {
int part = tive(nextValue) % ();
return (part).partition();
} else {
// no partitions are available, give a non-available partition
return tive(nextValue) % numPartitions;
}
} else {
// hash the keyBytes to choose a partition
return tive(2(keyBytes)) % numPartitions;
更多Java –大数据 –前端 –python人工智能资料下载,可百度访问:尚硅谷官网
版权声明:本文标题:03_尚硅谷大数据之Kafka工作流程分析 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1718178940a717942.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论