一、kafka的重要概念
1. kafka 分为 Producer、Consumer、Broker,基于topic发布与订阅消息。
2. 一个topic可以分多个partition,每个partition可以分布在不同的broker中。
3. 物理存储主要依赖partition。
4. 每个totic可以设置 Replications,因此物理存储partition也会有多个Replications。partition的replication中只有一个leader作为读写用。
5. producer负责产生消息,当往broker中放消息失败时可重发。
6. consumer负责消费消息,并维护消息消费pos, 这里的pos是对应partition中的位置。
7. 一个topic有多个partition的时候,每个partition能够保证内部有序,但不能保证跨partition的顺序。因此绝对有序,每个topic只能有一个partion,这影响性能。如果一个topic分多个patition,多个patition可以并发读写,可以提升性能,但是只能保证相对有序。
[img]http://dl2.iteye.com/upload/attachment/0129/8526/75905e53-5fe3-393d-8c28-83e26f155507.png[/img]
8. 一个topic可以被多个consumer group订阅, 每个consumer维护自己的pos.broker可以设置消息的生存时间,只有超过这个时间才会被删除,否则消息将一直存留。只要消息还没有被删除,consumer也可以更改pos重复消费。
9. consumer group包含多个consumer, 一个partition只能被consumer group中的一个consumer消费。因此consumer group中的consumer数量建议小于等于topic的partition数量,多了就会有consumer没有分配partition的浪费。
[img]http://dl2.iteye.com/upload/attachment/0129/8530/46488c94-adbc-36c6-a69b-990815c53940.png[/img]
10.相同consumer group中的consumer可以并发消费同一个topic,因为读写的是不同的partition,因此提升了性能,且保证一个消息只被消费一次。
11. Kafka中的Producer和consumer采用的是push-and-pull模式, 即producer推消息,consumer主动拉消息。
12. producer 向kafka推消息的时候,可以设置(acks)等待多少个replications响应才返回。设置为0就是异步,可以提升性能,但有可能丢失。建议设置为1.
13、Kafka支持以消息集合为单位进行批量发送,以提高push效率
14、Kafka中会把消息持久化到本地文件系统中,持久化是批量刷新,保持效率。
15、建议消息大小不要超过1M
16、默认情况下,Kafka根据传递消息的key来进行分区的分配,即hash(key) % numPartitions
17、kafka server.properties中配置的num.partitions为集群总的partitions数量。如果集群中的机器配置的num.partitions不一致,会提示跟lead节点不一致。