Kafka关键参数介绍
acks:(一般来讲通过acks设置all,加上业务捕捉异常记录表,就能知道kafka生产者发送的情况)ACKS为 0:(消息发出去了,不管有没有落到磁盘上,就认为成功)我的kafkaProducer在客户端,只要把消息发送出去,不管那条数据有没有在哪怕Partition Leader上落到磁盘,就不管他了,直接认为这个消息发送成功。如果你采用这种设置的话,那么你必须注意的一点是,可能你发送出去的
acks:(一般来讲通过acks设置all,加上业务捕捉异常记录表,就能知道kafka生产者发送的情况)
ACKS为 0:(消息发出去了,不管有没有落到磁盘上,就认为成功)
我的kafkaProducer在客户端,只要把消息发送出去,不管那条数据有没有在哪怕Partition Leader上落到磁盘,就不管他了,直接认为这个消息发送成功。
如果你采用这种设置的话,那么你必须注意的一点是,可能你发送出去的消息还在半路。结果呢,Partition Leader所在Broker就直接挂了,然后结果你的客户端还认为消息发送成功了,此时就会导致这条消息就丢失了。
ACKS为 1:(节点和节点之间同步失败了,客户端也以为发送成功了)
只要Partition Leader接收到消息而且写入本地磁盘了,就认为成功了,不管其他的Follower有没有同步过去这条消息了。
这种设置其实是kafka默认的设置方式也就是说默认情况下,要是不设置这个参数,只要Partition Leader写成功就算成功。但是这里有一个问题,万一Partition Leader刚刚接收到消息,Follower还没来得及同步过去,结果Leader所在的broker宕机了,此时也会导致这条消息丢失,因为人家客户端已经认为发送成功了。
ACKS为 ALL:(Follower都要把消息同步过去,才能认为这条消息是写入成功了。)
Partition Leader接收到消息之后,还必须要求ISR(副本同步队列)列表里跟Leader保持同步的那些 Follower都要把消息同步过去,才能认为这条消息是写入成功了。
如果说Partition Leader刚接收到了消息,但是结果Follower没有收到消息,此时Leader宕机了,那么客户端会感知到这个消息没发送成功,他会重试再次发送消息过去。
此时可能Partition 2的Follower变成Leader了,此时ISR列表里只有最新的这个Follower转变成的Leader了,那么只要这个新的Leader接收消息就算成功了。
注意: 如果kafka的Partition只有一个副本,也就是一个leader,没有follower,就相当于单机点了,单节点宕机了,数据还是会丢失.
retries:(默认为0)
retries参数的值决定了生产者可以重发消息的次数,如果达到这个次数,生产者会放弃重试并返回错误,一般我们可以通过配置重试次数来让生产者重新发送消息。比如配置retries=3,默认为0
factor:
applicatoin配置展现:default.replication.factor =1
replication-factor:用来设置主题的副本数。每个主题可以有多个副本,副本位于集群中不同的broker上,也就是说副本的数量不能超过broker的数量,否则创建主题时会失败
kafka的leader和follower
kafka的leader负责处理读写操作,而follower只负责副本数据的同步,如果leader出现故障,其他Follower会被重新选举leader,follower像一个consumer一样,拉去leader对应分区的数据,并保存到数据文件中
更多推荐
所有评论(0)