《-- Kafka --》
拉取kafka消息:(--from-beginning表示从头拉取消息)
kafka-console-consumer.sh --bootstrap-server machine-01:9092,machine-02:9092,machine-03:9092,machine-04:9092 --from-beginning --topic log_common
kafka leader选择策略
1.等待ISR中任意一个replica“活”过来,并且选它作为leader
2.选择第一个“活”过来的replica(并不一定是在ISR中)作为leader
unclean.leader.election.enable=true(默认为true,采用第二种),将此参数设置为false来启用第一种策略
request.required.acks参数来设置数据可靠性的级别:
1(默认):这意味着producer在ISR中的leader已成功收到的数据并得到确认后发送下一条message。如果leader宕机了,则会丢失数据。
0:这意味着producer无需等待来自broker的确认而继续发送下一批消息。这种情况下数据传输效率最高,但是数据可靠性确是最低的。
-1:producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。但是这样也不能保证数据不丢失,
比如当ISR中只有leader时(前面ISR那一节讲到,ISR中的成员由于某些情况会增加也会减少,最少就只剩一个leader),
这样就变成了acks=1的情况
min.insync.replicas=2 ISR中最小写入副本数
要保证数据写入到Kafka是安全的,高可靠的,需要如下的配置:
topic的配置:replication.factor>=3,即副本数至少是3个;2<=min.insync.replicas<=replication.factor
broker的配置:
leader的选举条件unclean.leader.election.enable=false
producer的配置:request.required.acks=-1(all),producer.type=sync