1.kafka消费者
1.1消费方式
consumer 采用 pull(拉)模式从 broker 中读取数据。pull 模式不足之处是,如果 kafka 没有数据,消费者可能会陷入循环中timeout。
1.2 分区分配策略
一个 consumer group 中有多个 consumer,一个 topic 有多个 partition,所以必然会涉及 到 partition 的分配问题,即确定那个 partition 由哪个 consumer 来消费。
Kafka 有两种分配策略,一是 RoundRobin,一是 Range。
roundRobin:是按照组来划分。
range:单个主题来划分,7%3,按照主题来划分。
从 0.9 版本开始, consumer 默认将 offset 保存在 Kafka 一个内置的 topic 中,该 topic 为__consumer_offsets。
1)修改配置文件 consumer.properties exclude.internal.topics=false
2)读取 offset
bin/kafka-console-consumer.sh --topic __consumer_offsets – zookeeper hadoop102:2181 --formatter “kafka.coordinator.group.GroupMetadataManager$OffsetsMessageForm atter” --consumer.config config/consumer.properties --from- beginning
同一个消费者组中的消费者,同一时刻只能有一个消费者消费。
2.kafka 的读写
1).顺序读磁盘–末尾添加
2).零拷贝:使用sendfile调用减少数据从磁盘读取到发送之间的内核态到用户态之间转换。
3).持久化到磁盘。
3.Zookeeper 在 Kafka 中的作用
Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所 有 topic 的分区副本分配和 leader 选举等工作。
Controller 的管理工作都是依赖于 Zookeeper 的。 以下为 partition 的 leader 选举过程
4. Kafka 事务
事务可以保证 Kafka 在 Exactly Once 语义的基 础上,生产和消费可以跨分区和会话,要么全部成功,要么全部失败。
Producer 事务
为了实现跨分区跨会话的事务,需要引入一个全局唯一的 Transaction ID,并将 Producer 获得的 PID 和 Transaction ID 绑定。这样当 Producer 重启后就可以通过正在进行的 Transaction ID 获得原来的 PID。
为了管理 Transaction,Kafka 引入了一个新的组件 Transaction Coordinator。Producer 就 是通过和 Transaction Coordinator 交互获得 Transaction ID 对应的任务状态。Transaction Coordinator 还负责将事务所有写入 Kafka 的一个内部 Topic,这样即使整个服务重启,由于 事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。
5.数据漏消费和重复消费分析–消费者
无论是同步提交还是异步提交 offset,都有可能会造成数据的漏消费或者重复消费。先提交 offset 后消费,有可能造成数据的漏消费;而先消费后提交 offset,有可能会造成数据的重复消费
6.拦截器–生产者:
过滤数据,
7.kafka的日志目录–index,log
首先是通过二分查找法来,找到index文件的索引,然后找到数据存在log的位置。
8.kafka controller 元数据更新
选举:controller 选举,抢资源.
kafka--知识点3--3
最新推荐文章于 2024-06-20 17:33:45 发布