分区的作用:
分区的作用是提供负载均衡的能力,实现系统的高伸缩性。不同的分区能够被分配到不同节点上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点都能独立执行各自分区的读写请求。还可以通过添加新的节点机器来增加整体系统的吞吐量。
分区策略:
分区策略是决定生产者将消息发送到哪个分区的算法。Kafka 提供了默认的分区策略,同时也支持自定义分区策略,实现如下接口自定义parttion方法即可。
轮询策略 round-robin,即顺序分配。消息会按顺序一个一个的分配给所有分区。这是kafka默认的分区策略。轮询策略实现了负载均衡,它能保证消息最大限度地被平均分配到所有分区上。
随机策略 randomness,将消息随机的放置到任意一个分区上。
按消息键保序策略,为每条消息标记上一个消息键。这个key可以是业务id,商品编号等。一旦消息被定义了 Key,那么就可以保证同一个 Key 的所有消息都进入到相同的分区里面。
生产者压缩算法:Producer 端压缩、Broker 端保持、Consumer 端解压缩。
压缩是空间换时间的思想,用 CPU 时间去换磁盘空间或网络 I/O 传输量。
发生压缩算法的两个位置:消息生产者和Broker端。如下图生产端定义了compression.type,参数为gzip。
大部分情况下 Broker 从 Producer 端接收到消息后仅仅是原封不动地保存而不会对其进行任何修改,有两种例外情况让 Broker 重新压缩消息。
1 生产端和producer端定义了不同的压缩算法。 2 broker端发生了消息格式转换,为了兼容老版本的数据,新消息向老版本格式转换,这个过程设计消的压缩和重压缩,很消耗性能并且丧失零拷贝特性。
何时解压缩:Consumer 解压缩还原成之前的消息。Consumer会从消息中得知消息生产端传递过来时的压缩算法,再进行解压缩。