分区下的副本因子
创建副本因子数,应该小于等于可用的broker数。
副本因子操作的单位,是以分区partition为单位的。
当有多个副本数时,kafka并不是将多个副本同时对外提供读取和写入。
作用是让kafka读取和写入数据时高可靠。
副本因子数是包含本身,同一个副本因子不能放在同一个broker中。
在有多个副本的情况下,kafka会为同一个分区下的区分设置角色关系,一个leader和多个follower
leader负责与外面的producer和consumer读写处理,而follower负责同步leader中的数据。
如果某一个分区,有3个副本因子,就算其中一个挂掉,那么只会在剩下的两个中,选择一个leader,但不会在其他的broker中另起一个副本,因为在另一台broker启动新的分区副本,就需要数据传递,会占用网络IO,阻塞该broker正常的性能。如果所有的副本都挂了,生产者如果生产的数据是指定分区的话,将写入不成功。(写入不成功,就需要数据重复去写,直到生产环境中有一个分区副本启动起来了,会选举这个分区副本为leader,接收消息)
ISR:in-sycn-replicas,kafka系统中,正在参与消息同步的分区副本。
ACK:确认机制。
生产者推消息,使用同步的方式,每次推消息,都等待返回结果。也可以使用异步的方式,推完消息不等待结果,而是提供一个回调函数。
生产者推送消息返回结果的策略,又可以设置为:
1.所有分区副本,都确认接收到消息,返回结果。
2. 不需要确定,数据可能会丢失。比如leader挂掉了。如何处理这样的情况,需要再次发送数据。
3.只需要leader确认
4.部分确认
分区副本,通过一个后台线程ReplicaFetherThread,完成对leader数据的同步。
问题:如何保证数据的一致性?
问题,如何保证数据丢失和数据重复?
数据丢失,可以再次发送数据,再次发送数据又可能造成数据重复。