关于消息存储的问题?

关于消息存储的问题?

一条消息来了,是会看下需要塞入哪个Topic(逻辑概念),这个Topic下有多个Partition(物理概念),Topic和Partition的关系应该是从Zookeeper中去取出来的,从而确定(默认随机)往哪台机器上写入消息。

一个Topic有几个Partition是在创建Topic的时候就固定的,后面也可以手动更改,这里有几个问题有些疑惑:


  1. 如果消息一下来了很多,而Topic只对应了两个Partition,消息都放不下了,这种情况消息还没被消费者消费掉,就会直接丢弃了吗?是以什么样的策略去丢弃呢?因为比如消息都是1min内进来的,按参数配置的话,丢弃前一天/前1h的消息,不是瞬间就清空了吗?

  2. 一个Topic比如对应2个Partition,如果都放在同一个物理机上,那是不是没意义了,因为分为多个Partition就是为了分布式存储。

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

如果消息一下来了很多,而Topic只对应了两个Partition,消息都放不下了,这种情况消息还没被消费者消费掉,就会直接丢弃了吗?是以什么样的策略去丢弃呢?因为比如消息都是1min内进来的,按参数配置的话,丢弃前一天/前1h的消息,不是瞬间就清空了吗?

什么情况下会出现消息放不下了?
kafka的数据是放磁盘的,如果磁盘满了,就无法向kafka中写入数据了,和消费者没有关系


一个Topic比如对应2个Partition,如果都放在同一个物理机上,那是不是没意义了,因为分为多个Partition就是为了分布式存储。

如果集群节点个数超过topic的分区个数,这种肯定是最好的,但是不太现实,大部分情况下都是topic的分区个数大于集群节点个数,这样就会存在一个节点存储同一个topic的多个partiton,这样也是有意义的,

假设A节点里面存储了通一个topic的2个分区  这样可以有两个线程同时向这2个分区读写数据,肯定比读写一个分区更快

  • 幕布斯5216845 提问者 #1

    每个partition是100G还是200G,这个是有默认的值吗?

    2021-10-02 17:22:14
  • 徐老师 回复 提问者 幕布斯5216845 #2

    分区大小没有限制,理论上可以占用当前机器的所有空闲磁盘

    2021-10-02 17:36:53
  • 幕布斯5216845 提问者 回复 徐老师 #3

    因为一台机器可以有多个topic的分区,如果没有限制的话,会不会存在某个topic中的partiition特别大,然后其余的partition就存不下东西了。

    感觉也不是很合理啊...


    2021-10-02 18:22:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师