乐趣区

关于kafka:Kafka的一些定义及实现

一些专业术语根本定义

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
退出移动版