比如这上面这个 leader都是1,如何判断该指向哪个broker?依据什么思路?
Leader: 1,1表示的就是brokder.id。
Leader: 1
brokder.id
我知道broker 1就是Leader: 1,我是不明白为什么会选择用leader:1? 因为它保存的数据最多吗?那怎么知道哪个broker的数据最多最完整?
另外一个问题,为什么每个分区的数据大小不同? 有什么方法让它们同步吗?
https://www.orchome.com/22
你是如何验证分区数据大小的?消息是轮询存储在不同的parition上的,除非生产者指定往其中某个parition里发。
1、我就是用./kafka-run-class.sh kafka.tools.GetOffsetShell查看 分区消息数量的。2、生产者指定了写入到分区0,原先的副本因子是默认的1,后面改为3,按我的理解,broker应该能感知到副本数的变化,然后将每个broker的数据数量同步保持一致。 那么kafka.tools.GetOffsetShell的结果应该是每个分区数量都相等,这样丢了一个broker,数据还有保留备份。
上面这个图,分区数量不一致,broker:1 如果宕机了,其他两个broker怎么办?
这个是3个分区,概念你理解错了吧? 你3个分区,比如有100条消息,会分别存到这3个分区上,a分区33条,b分区33,c分区34条。副本因子是备份的数量 a的副本因子存在了broker2上,同步a分区的数据。如果broker1挂了 broker2中a副本因子就成为了leader,leader就成了2。如果broker2也挂了,那这33条消息就丢了。可参考:https://www.orchome.com/5
你说的和我想的一致,那么有什么方法让分区消息数量保持一致? 比如上面图片,生产者已经有数据了 而且指定写入分区0。
什么叫分区消息数量保持一致? 如果理解了我感觉你就不会这么问。我感觉你把分区和分区副本搞混了。
我表达的不对,按你说的是这样, broker:1 a:33 、 broker:2 b:33 、broker:3 c:34,如有副本就是broker:1 a:33 c:34、 broker:2 b:33 a:33、broker:3 c:34 b:33,大概是这样吧? 我的问题是上面图片的消息分布不均或是说有点消息倾斜了,本身生产者是有指定写入分区0的,那么就意味0分区消息保存的就会多吗? 有什么办法让消息分配均衡一点?
对,我在稍微优化一下,a变成分区0,b变成分区1,c变成分区2
broker: 1 0:33 2(副本):34 broker: 2 1:33 0(副本):33 broker: 3 2:34 1(副本):33
生产者指定了写入分区0上,那么,1和2分区,肯定就不会收到任何新消息(你都要求发送到0分区了,怎么可能会平均)。
1
2
如果生产者不指定,那么这3个分区,就会相对平均了(轮询发送机制)。
指定了写入分区0,如果分区0所在的broker宕机了,生产者是直接报错还是会等待broker 1和2选举(假设2节点能选举)产生新的broker leader,再写入?写入的分区是0,消费者读取的分区可以是1和2吗?
选举后发到新leader上,看生产者允许重试次数和超时时间。
消费者是消费者的策略,也可以指定消费哪些分区,这些文章里都有兄弟,你可参考:https://www.orchome.com/451
找不到想要的答案?提一个您自己的问题。
0 声望
这家伙太懒,什么都没留下
Leader: 1
,1表示的就是brokder.id
。我知道broker 1就是Leader: 1,我是不明白为什么会选择用leader:1? 因为它保存的数据最多吗?那怎么知道哪个broker的数据最多最完整?
另外一个问题,为什么每个分区的数据大小不同? 有什么方法让它们同步吗?
https://www.orchome.com/22
你是如何验证分区数据大小的?
消息是轮询存储在不同的parition上的,除非生产者指定往其中某个parition里发。
1、我就是用./kafka-run-class.sh kafka.tools.GetOffsetShell查看 分区消息数量的。
2、生产者指定了写入到分区0,原先的副本因子是默认的1,后面改为3,按我的理解,broker应该能感知到副本数的变化,然后将每个broker的数据数量同步保持一致。 那么kafka.tools.GetOffsetShell的结果应该是每个分区数量都相等,这样丢了一个broker,数据还有保留备份。
上面这个图,分区数量不一致,broker:1 如果宕机了,其他两个broker怎么办?
这个是3个分区,概念你理解错了吧? 你3个分区,比如有100条消息,会分别存到这3个分区上,a分区33条,b分区33,c分区34条。副本因子是备份的数量 a的副本因子存在了broker2上,同步a分区的数据。如果broker1挂了 broker2中a副本因子就成为了leader,leader就成了2。如果broker2也挂了,那这33条消息就丢了。
可参考:https://www.orchome.com/5
你说的和我想的一致,那么有什么方法让分区消息数量保持一致? 比如上面图片,生产者已经有数据了 而且指定写入分区0。
什么叫分区消息数量保持一致? 如果理解了我感觉你就不会这么问。
我感觉你把分区和分区副本搞混了。
我表达的不对,按你说的是这样, broker:1 a:33 、 broker:2 b:33 、broker:3 c:34,如有副本就是broker:1 a:33 c:34、 broker:2 b:33 a:33、broker:3 c:34 b:33,大概是这样吧? 我的问题是上面图片的消息分布不均或是说有点消息倾斜了,本身生产者是有指定写入分区0的,那么就意味0分区消息保存的就会多吗? 有什么办法让消息分配均衡一点?
对,我在稍微优化一下,a变成分区0,b变成分区1,c变成分区2
broker: 1 0:33 2(副本):34 broker: 2 1:33 0(副本):33 broker: 3 2:34 1(副本):33
生产者指定了写入分区0上,那么,
1
和2
分区,肯定就不会收到任何新消息(你都要求发送到0分区了,怎么可能会平均)。如果生产者不指定,那么这3个分区,就会相对平均了(轮询发送机制)。
指定了写入分区0,如果分区0所在的broker宕机了,生产者是直接报错还是会等待broker 1和2选举(假设2节点能选举)产生新的broker leader,再写入?
写入的分区是0,消费者读取的分区可以是1和2吗?
选举后发到新leader上,看生产者允许重试次数和超时时间。
消费者是消费者的策略,也可以指定消费哪些分区,这些文章里都有兄弟,你可参考:https://www.orchome.com/451
你的答案