美文网首页
尚硅谷大数据技术之Kafka

尚硅谷大数据技术之Kafka

作者: 尚硅谷教育 | 来源:发表于2018-12-07 11:45 被阅读41次

    3.2.3 Zookeeper存储结构


    image.png

    注意:producer不在zk中注册,消费者在zk中注册。

    3.3 Kafka消费过程分析

    kafka提供了两套consumer API:高级Consumer API和低级Consumer API。

    3.3.1 高级API

    1)高级API优点

    高级API 写起来简单

    不需要自行去管理offset,系统通过zookeeper自行管理。

    不需要管理分区,副本等情况,.系统自动管理。

    消费者断线会自动根据上一次记录在zookeeper中的offset去接着获取数据(默认设置1分钟更新一下zookeeper中存的offset)

    可以使用group来区分对同一个topic 的不同程序访问分离开来(不同的group记录不同的offset,这样不同程序读取同一个topic才不会因为offset互相影响)

    2)高级API缺点

    不能自行控制offset(对于某些特殊需求来说)

    不能细化控制如分区、副本、zk等

    3.3.2 低级API

    1)低级 API 优点

    能够让开发者自己控制offset,想从哪里读取就从哪里读取。

    自行控制连接分区,对分区自定义进行负载均衡

    对zookeeper的依赖性降低(如:offset不一定非要靠zk存储,自行存储offset即可,比如存在文件或者内存中)

    2)低级API缺点

    太过复杂,需要自行控制offset,连接哪个分区,找到分区leader 等。

    3.3.3 消费者组

    image.png
    消费者是以consumer group消费者组的方式工作,由一个或者多个消费者组成一个组,共同消费一个topic。每个分区在同一时间只能由group中的一个消费者读取,但是多个group可以同时消费这个partition。在图中,有一个由三个消费者组成的group,有一个消费者读取主题中的两个分区,另外两个分别读取一个分区。某个消费者读取某个分区,也可以叫做某个消费者是某个分区的拥有者。
    在这种情况下,消费者可以通过水平扩展的方式同时读取大量的消息。另外,如果一个消费者失败了,那么其他的group成员会自动负载均衡读取之前失败的消费者读取的分区。
    3.3.4 消费方式
    consumer采用pull(拉)模式从broker中读取数据。
    push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。
    对于Kafka而言,pull模式更合适,它可简化broker的设计,consumer可自主控制消费消息的速率,同时consumer可以自己控制消费方式——即可批量消费也可逐条消费,同时还能选择不同的提交方式从而实现不同的传输语义。
    pull模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直等待数据到达。为了避免这种情况,我们在我们的拉请求中有参数,允许消费者请求在等待数据到达的“长轮询”中进行阻塞(并且可选地等待到给定的字节数,以确保大的传输大小)。
    3.3.5 消费者组案例
    1)需求:测试同一个消费者组中的消费者,同一时刻只能有一个消费者消费。
    2)案例实操
    (1)在hadoop102、hadoop103上修改/opt/module/kafka/config/consumer.properties配置文件中的group.id属性为任意组名。
    [atguigu@hadoop103 config] vi consumer.properties group.id=atguigu (2)在hadoop102、hadoop103上分别启动消费者 [atguigu@hadoop102 kafka] bin/kafka-console-consumer.sh
    --zookeeper hadoop102:2181 --topic first --consumer.config config/consumer.properties
    [atguigu@hadoop103 kafka] bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --topic first --consumer.config config/consumer.properties (3)在hadoop104上启动生产者 [atguigu@hadoop104 kafka] bin/kafka-console-producer.sh
    --broker-list hadoop102:9092 --topic first

    hello world
    (4)查看hadoop102和hadoop103的接收者。
    同一时刻只有一个消费者接收到消息。

    本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。

    相关文章

      网友评论

          本文标题:尚硅谷大数据技术之Kafka

          本文链接:https://www.haomeiwen.com/subject/kjqthqtx.html