kafka消息分区机制原理
2020-04-22 16:08:24来源:博客园 阅读 ()
kafka消息分区机制原理
背景
kafka如何支撑海量消息的集中写入?
答案就是消息分区。
核心思想是:负载均衡,采用合适的分区策略把消息写到不同的broker上的分区中;
其它的产品中有类似的思想。
比如monogodb, es 里面叫做 shard;? ?hbase叫region,? cassdra叫vnode;
消息的三层结构
如下图:
即? topic -> partition -> message ;
topic是逻辑上的消息容器;
partition实际承载消息,分布在不同的kafka的broke上;
message即具体的消息。
分区策略
round-robin轮询
消息按照分区挨个的写。
randomness随机分区
随机的找一个分区写入,代码如下:
List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
return ThreadLocalRandom.current().nextInt(partitions.size());
key
相同的key的消息写到固定的分区中
自定义分区
必须完成两步:
1,自定义分区实现类,需要实现org.apache.kafka.clients.producer.Partitioner接口。
主要是实现下面的方法:
int partition(String topic, Object key, byte[] keyBytes,
Object value, byte[] valueBytes, Cluster cluster);
比如按照区域分区。
List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
return partitions.stream().filter(p -> isSouth(p.leader().host()))
.map(PartitionInfo::partition).findAny().get();
2,显示配置生产者端的参数partitioner.class为具体的类
系统默认:如果消息有key,按照key分区策略,否则按照轮询策略。
小结
kafka的分区实现消息的高吞吐量的主要依托,主要是实现了写的负载均衡。可以指定各种负载均衡算法。
负载均衡算法非常重要,需要极力避免消息分区不均的情况,可能给消费者带来性能瓶颈。
小结如下:
原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!
原文链接:https://www.cnblogs.com/snidget/p/12757698.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解 2020-06-11
- kafka 2020-06-09
- 高吞吐量的分布式发布订阅消息系统Kafka之Producer源码分析 2020-05-30
- SpringBoot2.3整合RabbitMQ实现延迟消费消息 2020-05-26
- 针对kafka_2.13版本测试过程中的一些坑 2020-05-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash