Kafka基本概念及其入门级问题问答

(1)Kafka是什么?

它是为了解决大数据实时传输处理的一个中间件,基于发布订阅模式设计的,可以看作是MQ,也可以当作数据库使用(不推荐)。

上图再看概念:

在这里插入图片描述
Producer:数据的生产者。
Kafka Cluster:Kafka集群。
Broker:Kafka Cluster集群下会有多个Broker,就是一个个Kafka集群中的节点。
Topic:主题,做消息类型分类。Kafka是基于发布订阅模式的,所以主题就是供消费者们订阅的。
Partition:分区,提高主题的负载能力,不管是读写,都能分散到两个分区中,加快读写速度。
Replication:备份,两个分区的基础上,会有对方数据的备份副本,作用是容灾备份。

(2)备份跟分区的概念怎么分清楚?

答: Replication备份是两份一模一样的数据,一份是Leader数据,一份是Follower数据,Follower会主动定时地从Leader拉取数据。
Partition分区是把同一份数据分两份,通过一些分发策略,例如最经典的hash轮询,两个分区存放1~4的数据,则1,3在分区A;2,4在分区B。写的时候分区写,读的时候也会分区读~

(3)创建的时候:ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 1.

意思是说你当前集群是单节点,无法创建两个副本,同理,副本是分散到每个集群节点上的,所以副本数<=集群机器数

加上消费者的情况:

在这里插入图片描述
consumer group :消费组,多个消费者归属于同一个消费组
consumer:消费者

同一消费组下,如果启动了多个消费者,那么获取到的数据也是根据一定的分发策略来发送消息到每个消费者手上。刚开始使用不熟悉的时候,拉取代码下来的时候没在配置文件中重新定一个新的消费组,结果跟测试环境的消费者抢消费了~
如何配一个消费组下面多少个消费者最合适?

答:消费者跟分区数一致,就可以充分利用多分区的优势加快读取速度!现在网上很多说开启多线程消费,意思也就是开启多个消费者,并且一定一定建议线程数与分区数一致!

消费者拉取数据,都是从Leader上面拉取,Follower的数据同步只是做个备份,在Leader出现问题的时候,在众多的Follower中重新选举一个Follower,再进行消费。
问题?为什么都是消费者主动拉取?不能生产者推送吗?消费者怎么知道什么时候拉取?不浪费资源吗?

答:
(1)生产者主动push的话太强硬了,消费者被动accept的情况下,生产者没办法充分考虑每个消费者的消费能力,推得太快容易造成数据丢失,推得太慢又容易造成资源浪费(我原本一秒钟能处理1000条,你只给我推了10条)。
(2)消费者会通过轮询定时去拉取。为了防止常轮询空轮询造成的资源浪费,Kafka提供一种空循环时长判断,当某次循环返回拉取到数据为空,表示当前没有数据可消费,则等待一段时间后才会进行下一次的拉取。

问题?不管生产者还是消费者都有集群,通过什么管理?

答:Kafka通过Zookeeper的version-2的文件夹来记录消费偏移量和一些集群信息,它自带一个ZK。但是在新版本的Kafka已经通过自带的一个__consumer-topic承接了大部分内容,减去了频繁操作ZK的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值