kafka知识点概述

1.无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

2.zookeeper作用:统一化目录结构
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化,
Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者 做 出 相 应 的 反 应 , 从 而 实 现 集 群 中 类 似Master/Slave管理模式
提供的服务包括: 统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、 软负载均衡等。
hadoop保存一些元数据信息在zookeeper上面,hadoop2可以从zookeeper上拿过来,这种特点会造成一个现象:会产生大量的网络IO,所以在企业生产环境中,一般会单独开启3到5台机器做zookeeper集群
zookeeper所在的节点,一定要开网络监控

3.kafka集群中,zookeeper的作用:
kafka是依赖zookeeper的,zookeeper保存的信息有两个:kafka集群节点的状态信息,消费者当前消费消息的状态信息,没有生产者的元数据信息

4.kafka的消费组中,同一时间,只能有一个消费者从kafka节点中消费消息(同一个消费者组中的消费者,同一时刻只能有一个消费者消费。)
  同一个消费组里的每个消费者,是不会重复消费消息的,一条消息不会被同一个组中的消费者重复消费
  只要一个消费者和kafka节点中的一个分区建立了socket连接,那么这个分区里的所有数据都会交给这个消费者消费,而不会交给其他的消费者
  不考虑意外,比如宕机,网络震荡,只要一个消费者和一个分区建立了关系,这个分区里的数据就永远交给那一个消费者消费
  消息的消费是以分区为单元进行划分的,不会是以一条一条的消息为单元消费的,每次消费都是一整个分区的消息
  同一个分区中的消息是有序的,不同分区间的消息不能保证是有序的
  同一个消费者,是可以消费多个分区中的消息
  
5.kafka消费过程分析:
消息由生产者发布到Kafka集群后,会被消费者消费。消息的消费模型有两种:推送模型(push)和拉取模型(pull)。
基于推送模型(push)的消息系统,由消息代理记录消费者的消费状态。消息代理在将消息推送到消费者后,标记这条消息为已消费,但这种方式无法很好地保证消息被处理。
比如,消息代理把消息发送出去后,当消费进程挂掉或者由于网络原因没有收到这条消息时,就有可能造成消息丢失(因为消息代理已经把这条消息标记为已消费了,但实际上这条消息并没有被实际处理)。
如果要保证消息被处理,消息代理发送完消息后,要设置状态为“已发送”,只有收到消费者的确认请求后才更新为“已消费”,这就需要消息代理中记录所有的消费状态,这种做法显然是不可取的。
Kafka采用拉取模型,由消费者自己记录消费状态,每个消费者互相独立地顺序读取每个分区的消息。
有两个消费者(不同消费者组)拉取同一个主题的消息,消费者拉取的最大上限通过最高水位(watermark)控制,生产者最新写入的消息如果还没有达到备份数量,对消费者是不可见的。
这种由消费者控制偏移量的优点是:消费者可以按照任意的顺序消费消息。比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。
在一些消息系统中,消息代理会在消息被消费之后立即删除消息。如果有不同类型的消费者订阅同一个主题,消息代理可能需要冗余地存储同一消息;
或者等所有消费者都消费完才删除,这就需要消息代理跟踪每个消费者的消费状态,这种设计很大程度上限制了消息系统的整体吞吐量和处理延迟。
Kafka的做法是生产者发布的所有消息会一致保存在Kafka集群中,不管消息有没有被消费。用户可以通过设置保留时间来清理过期的数据,比如,设置保留策略为两天。
那么,在消息发布之后,它可以被不同的消费者消费,在两天之后,过期的消息就会自动清理掉。

新建topic:kafka-topics.sh --zookeeper hadoop101:2181 --create --replication-factor 3 --partitions 3 --topic test2

删除topic:kafka-topics.sh --zookeeper hadoop101:2181 --delete --topic test2

消息生产者:kafka-console-producer.sh --broker-list hadoop101:9092,hadoop102:9092,hadoop103:9092 --topic test2
消息消费者:kafka-console-consumer.sh --zookeeper hadoop102:2181 --topic test2 --consumer.config /opt/soft/kafka_2.11/config/consumer.properties
           kafka-console-consumer.sh --zookeeper hadoop103:2181 --topic test2 --consumer.config /opt/soft/kafka_2.11/config/consumer.properties

你可能感兴趣的:(kafka)