一些专业术语根本定义

Topic:主题,相当于为某一类业务产生音讯数据。
Broker:相当于服务端,接管解决客户端音讯申请。同一台linux机器能够通过server.properties配置多个broker,也能够在多台机器上散布多个broker,防止单机宕机造成服务不可用。
Partition:分区,topic能够分成多个分区,音讯散布在不同分区里,全局惟一。
leader正本:领导者正本。对外提供服务,同时一个broker里可能会有不同分区的leader和follower,然而不会同时存在同一个分区的leader和follower。
follower正本:追随者正本。不对外提供服务,只从leader正本拉取数据做同步工作。在leader挂掉之后能够参加选举。
offset:音讯位移,须要被动或者被动的提交,用于记录上一次生产地位。
ISR:分区中保护了一个动静汇合ISR,其中会保留leader正本以及一些在肯定工夫内(replica.lag.time.max.ms,默认10秒)与leader正本数据绝对同步的follower正本,follower会因为这个前提动静进出ISR。
Consumer Group:消费者组,consumer实例能够配置groupid,对于一个消费者组的多个consumer来说,它们会一起协调来瓜分一个主题下的所有分区(换言之,一个topic的单个分区的音讯,只有一个consumer能获取到)。不同消费者组是相互隔离的,不受彼此影响。一般来说,消费者组内的消费者实例不能大于主题下的分区总数,否则会呈现有的实例调配不到分区变成闲暇状态。
Rebalance:重均衡。消费者组内的某个实例挂掉之后,须要对残余的consumer实例从新进行topic下的分区的调配,这个过程可能会很久,此时所有的实例都须要进行工作,相似JVM中的“STOP THE WORLD”。产生重均衡的条件有,组内消费者实例数量发生变化,订阅topic数变动,分区数发生变化。
Coordinator:协调者,协调Consumer Group中的服务,包含执行Rebalance以及提供位移治理和组成员治理等

音讯流转流程图

broker及leader选举机制

broker leader选举
在kafka集群中,会有多个broker节点,第一个在zk上胜利创立长期节点/controller的就是控制器,其余的broker则会通过controller path在zk上注册watch,当控制器broker退出时,所有的broker节点都通过watch感知到,它们会去竞争创立新的/controller。zk会保障只有一个broker胜利创立长期节点,其余的broker会收到异样告诉,只能去注册新的watch。
个人感觉这是一种相似分布式锁+监听器的模式。

分区leader正本选举
个别状况下,分区的leader正本只会从ISR中选举,依照AR汇合(所有正本汇合)的程序默认第一个follower正本成为新的leader,除非配置unclean.leader.election.enable进行unclean领导者选举,也就是非同步正本参加选举。

要害配置信息(consumer)

enable.auto.commit 手动提交或者主动提交,主动提交是在调用 poll 办法时,提交上次 poll 解决过后的位移
auto.commit.interval.ms 主动提交距离
heartbeat.interval.ms 心跳距离
session.timeout.ms consumer过期工夫,超过这个工夫没有收到申请Coordinator就会认为consumer挂了
max.poll.interval.ms 两次poll的最大间隔时间

kafka罕用linux命令

linux下启动zookeeper服务和kafka,就能够进行音讯的生产与生产了

后盾启动 nohup ./bin/kafka-server-start.sh ./config/server.properties >>/usr/local/kafka/kafka_2.12-2.8.0/logs/kafka.log 2>&1 &cd ../ 进行服务 ./kafka_2.12-2.8.0/bin/kafka-server-stop.sh查问端口号 netstat -anlpt|grep 9092生产者 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic消费者 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning查看topics ./kafka-topics.sh --list --zookeeper localhost:2181