参考
-
kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- zookeeper在kafka的作用是什么?
- kafka中几乎不允许对消息进行“随机读写”的原因是什么?
- kafka集群consumer和producer状态信息是如何保存的?
- partitions设计的目的的根本原因是什么?
-
kafka中的topic为什么要进行分区? 同时可阅读文中的参考文章
- 分区对producer和consumer都是透明的
- 只有一个分区,则数据都在一个broker上,读写性能有瓶颈。多个分区分布在多个broker上,可并行读写,提升性能。
- consume消费数据并不需要等到segment写满,只要有一条数据被commit,就可以立马被消费
- 为什么有了partition还需要segment。如果不引入segment,一个partition直接对应一个文件(应该说两个文件,一个数据文件,一个索引文件),那这个文件会一直增大。同时,在做data purge时,需要把文件的前面部分给删除,不符合kafka对文件的顺序写优化设计方案。引入segment后,每次做data purge,只需要把旧的segment整个文件删除即可,保证了每个segment的顺序写
总结: kafka入门介绍
参考自Kafka 入门介绍,建议看该文的“小结”部分
- partition的作用是提高并发性。replication是为了增加副本,容灾。
- Kafka 只会保证在 Partition 内消息是有序的,而不保证全局有序。
- 无论消息是否被消费,除非消息到期 Partition 从不删除消息。到期后消息被删除。
- Partition 会为每个 Consumer Group 保存一个偏移量,记录 Group 消费到的位置。
- 一个 Partition只会被一个Consumer Group消费一次。而每个Consumer Group可能有多个Consumer,所以换句话说,同一个 Consumer Group 内,一个 Partition 只能被一个 Consumer 消费。
- 推论1:如果 Consumer 的数量大于 Partition 数量,则会有 Consumer 是空闲的。
-
推论2:如果 Consumer 的数量小于 Partition 数量,则一个 Consumer 可能消费多个 Partition。
- 同一个 Partition 有多个副本,并分布在不同的 Broker 上,那么 Producer 应该写入到哪一个副本上呢?Consumer 又应该从哪个副本上读取呢?
- Kafka 的各个 Broker 需要与 Zookeeper 进行通信,每个 Partition 的多个副本之间通过 Zookeeper 的 Leader 选举机制选出主副本。所有该 Partition 上的读写都通过这个主副本进行。
其它的冗余副本会从主副本上同步新的消息。就像其它的 Consumer 一样。 - kafka partition和group 提到了__consumer_offsert
- YHYR_YCY Partition Replication
- jewes
kafka教程
- lizhitao kafka教程 kafka设计、优化、运维、异常分析、源码等
- qiankunli kafka 架构 图片众多,从各个角度讲述了kafka server端的架构
-
wangzzu kafka源码分析
内含多篇源码文章,十分齐全 -
kafka-in-a-nutshell 评论区里cs94njw提出了由于__consumer_offset只有一个副本,当对应节点宕机时,无法消费的问题。
- 一个topic可以有多个partition
- 每个partition可视为一个log
-
each partition can be placed on a separate machine to allow for multiple consumers to read from a topic in parallel. 一个partition只存在于一台机器上
Log的写入和读取 - producer根据负载均衡写往topic的各个partition,consumer则以类似方式消费每个partition
- Consistency and Availability 比较了集群崩溃时有副本和无副本的区别。
- 客户端Consistency 生产者、消费者各有三种级别的处理方式:
- 生产者:ack=0、1、all。收到足够ack时答复生产者。(注意,客户端只接收sync到所有副本的消息)
- 消费者:每条信息消费至多1次/至少一次/刚好一次。一般选择至少一次的方式,可能导致重复消费,由下游处理
-
Understanding Kafka Topics and Partitions
In one consumer group, each partition will be processed by one consumer only. 一个group内,每个partition只会由一个consumer顺序消费 - AGuideToTheKafkaProtocol-Network kafka官方介绍文
生产者相关
-
kafka生产者
生产者写入消息
网友评论