broker:一个kafka集群有多个broker,每个topic都可以有多个分区,每个分区都可以有多个副本。broker数、分区数、副本数随时可以扩容,这是典型的分布式多副本冗余机制。
通过zookeeper从各broker中选出一个作为controller,controller负责topic分区及其副本在各broker的分布,以及每个分区leader的选出。只有leader会负责客户端的读写,其他follower只会从leader fetch数据保持数据同步。假如一个普通的broker挂了,那么leader在此节点上的分区将会重新从ISR中选出leader。ISR是保持同步的副本集。
producer:生产者客户端往服务端发送数据时,不是一条条发,而是攒到一定量或是每隔一段时间再发,减少了对服务端的压力。服务端是顺序写盘,且采用了内存映射文件的方式,减少了用户态与内核态的转换,速度比较块。
consumer:也是由于内存映射文件的方式,消费者客户端从服务端读取数据非常快,还可以控制一次最多从topic poll多少条数据,进一步提速。此外,可以选择自动提交消费偏移量或者在poll之后手动调用commit方法提交偏移量,这样在consumer重启之后就会从上次提交的消费偏移量位置处继续往下消费,不会重复消费。