分享

broker下线,Partition分配问题

2k124 发表于 2017-2-26 13:39:15 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 5 15318
【背景】
公司kafka集群,有几台机器被回收,由于维护疏忽,并没有做Partition转移,目前通过manager界面观察业务生产、消费正常,有如下问题:
【问题】
    看到topic之前被分配到已经下线机器的Partition还存在于列表,但是并不有消息更新了,请问这是kafka通过ZK自动识别Partition不存在了么?这种情况是不是无需在调整Partition?还是说要从新调整,把下线机器的Partition删除掉?



k1.png
可.png

已有(5)人评论

跳转到指定楼层
easthome001 发表于 2017-2-26 16:57:48
楼主的副本是多少。
如果副本多个的话, 应该可以正常运行的。
可以了解下副本机制
更多

Kafka允许topic的分区拥有若干副本,这个数量是可以配置的,你可以为每个topci配置副本的数量。Kafka会自动在每个个副本上备份数据,所以当一个节点down掉时数据依然是可用的。
Kafka的副本功能不是必须的,你可以配置只有一个副本,这样其实就相当于只有一份数据。
创建副本的单位是topic的分区,每个分区都有一个leader和零或多个followers.所有的读写操作都由leader处理,一般分区的数量都比broker的数量多的多,各分区的leader均匀的分布在brokers中。所有的followers都复制leader的日志,日志中的消息和顺序都和leader中的一致。flowers向普通的consumer那样从leader那里拉取消息并保存在自己的日志文件中。
许多分布式的消息系统自动的处理失败的请求,它们对一个节点是否
着(alive)”有着清晰的定义。Kafka判断一个节点是否活着有两个条件:
1. 节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接。
2. 如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久。
Leader会追踪所有“同步中”的节点,一旦一个down掉了,或是卡住了,或是延时太久,leader就会把它移除。至于延时多久算是“太久”,是由参数replica.lag.max.messages决定的,怎样算是卡住了,怎是由参数replica.lag.time.max.ms决定的。
只有当消息被所有的副本加入到日志中时,才算是“committed”,只有committed的消息才会发送给consumer,这样就不用担心一旦leader down掉了消息会丢失。Producer也可以选择是否等待消息被提交的通知,这个是由参数request.required.acks决定的。
Kafka保证只要有一个“同步中”的节点,“committed”的消息就不会丢失。
Kafaka动态维护了一个同步状态的副本的集合(a set of in-sync replicas),简称ISR,在这个集合中的节点都是和leader保持高度一致的,任何一条消息必须被这个集合中的每个节点读取并追加到日志中了,才回通知外部这个消息已经被提交了。因此这个集合中的任何一个节点随时都可以被选为leader.ISR在ZooKeeper中维护。ISR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服。ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR.这种leader的选择方式是非常快速的,适合kafka的应用场景。
一个邪恶的想法:如果所有节点都down掉了怎么办?Kafka对于数据不会丢失的保证,是基于至少一个节点是存活的,一旦所有节点都down了,这个就不能保证了。


回复

使用道具 举报

2k124 发表于 2017-2-27 11:09:55
easthome001 发表于 2017-2-26 16:57
楼主的副本是多少。
如果副本多个的话, 应该可以正常运行的。
可以了解下副本机制

首先,非常感谢您的回复,我刚才看了一下,我们的测试集群确实是只有一个副本。。那么在这种情况下,broker下线了:
1.kafka是不是可以自动识别了partition的减少?
2.老数据可能会丢失,那么新生产的呢?


k3.png
回复

使用道具 举报

2k124 发表于 2017-2-27 16:41:03
easthome001 发表于 2017-2-26 16:57
楼主的副本是多少。
如果副本多个的话, 应该可以正常运行的。
可以了解下副本机制

还有一个 我现在replication-factor 不是1么。那么我想增加成3,并且想使用kafka的自动分配策略,貌似只能删除topic重新建立吧?
回复

使用道具 举报

admin 发表于 2017-2-27 17:45:03
2k124 发表于 2017-2-27 16:41
还有一个 我现在replication-factor 不是1么。那么我想增加成3,并且想使用kafka的自动分配策略,貌似只 ...
这个是在创建topic的时候指定的
回复

使用道具 举报

tntzbzc 发表于 2017-2-27 17:48:19
2k124 发表于 2017-2-27 11:09
首先,非常感谢您的回复,我刚才看了一下,我们的测试集群确实是只有一个副本。。那么在这种情况下,brok ...

1.kafka是不是可以自动识别了partition的减少?
下线后,kafka自己是能识别的
2.老数据可能会丢失,那么新生产的呢?
新的数据,只要不在挂掉的机器上,应该没有问题的

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条