关于消息存储的问题?
一条消息来了,是会看下需要塞入哪个Topic(逻辑概念),这个Topic下有多个Partition(物理概念),Topic和Partition的关系应该是从Zookeeper中去取出来的,从而确定(默认随机)往哪台机器上写入消息。
一个Topic有几个Partition是在创建Topic的时候就固定的,后面也可以手动更改,这里有几个问题有些疑惑:
如果消息一下来了很多,而Topic只对应了两个Partition,消息都放不下了,这种情况消息还没被消费者消费掉,就会直接丢弃了吗?是以什么样的策略去丢弃呢?因为比如消息都是1min内进来的,按参数配置的话,丢弃前一天/前1h的消息,不是瞬间就清空了吗?
一个Topic比如对应2个Partition,如果都放在同一个物理机上,那是不是没意义了,因为分为多个Partition就是为了分布式存储。
正在回答
如果消息一下来了很多,而Topic只对应了两个Partition,消息都放不下了,这种情况消息还没被消费者消费掉,就会直接丢弃了吗?是以什么样的策略去丢弃呢?因为比如消息都是1min内进来的,按参数配置的话,丢弃前一天/前1h的消息,不是瞬间就清空了吗?
什么情况下会出现消息放不下了?
kafka的数据是放磁盘的,如果磁盘满了,就无法向kafka中写入数据了,和消费者没有关系
一个Topic比如对应2个Partition,如果都放在同一个物理机上,那是不是没意义了,因为分为多个Partition就是为了分布式存储。
如果集群节点个数超过topic的分区个数,这种肯定是最好的,但是不太现实,大部分情况下都是topic的分区个数大于集群节点个数,这样就会存在一个节点存储同一个topic的多个partiton,这样也是有意义的,
假设A节点里面存储了通一个topic的2个分区 这样可以有两个线程同时向这2个分区读写数据,肯定比读写一个分区更快
- 参与学习 1151 人
- 提交作业 5960 份
- 解答问题 1144 个
不用Java初级内容充数!不用与大数据岗位无关内容占课时!我们做的就是“精华版”大数据课程
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星