kafka呢,大名鼎鼎,声名远播,老少皆宜。
前世今生
kafka最初由领英开发,没错,就是那个在中国压根没见过的,后来被微软收购的社交平台。于2011年初开源,并于2012年10月23日由Apache Incubator孵化出站。便成为了我们熟知的Apache Kafka。
kafka的开发语言是Scala,那自然是需要JVM了。此外还需要zookeeper。
Apache Kafka® is a distributed streaming platform.
一个分布式的流处理平台。说白了,就是大型的可靠的处理消息流的集群。
使用层面有几个概念必须知道
1.broker
物理层面的机器节点。一台机器上部署了kafka,那么这台机器就是kafka集群的一个节点。一般情况下,一台机器只会部署一台kafka。
2.topic
用于消息分组的最基础的抽象概念。一个集群或某一个broker都可以容纳有多个topic。
3.partition
基于topic的分组,每一个topic又可以分为多个partition。partition之间没有关联,各自有各自的顺序和消息内容。俗称topic分区。
4.producer
生产者。发送消息到kafka的角色。需要指定topic。也可以指定partition。当不指定partition的时候,也可以根据自己的需求实现partition的“负载均衡”。

5.consumer
消费者。从kafka消费消息的角色。必须隶属于一个consumer group。
6.offset
记录consumer消费消息进度。consumer-topic-partition-offset。
7.consumer group
消费组。用于区分消费者们。
* 一个consumer group可以有多个consumer,但是一个consumer只能属于一个consumer group。
* 组与组之间无任何关联,可以消费相同的消息,offset也互相都不关联。
* 一个consumer group可以订阅多个topic。
* 每一个topic下的partition只能被一个consumer消费,不过可以被不同consumer group下的多个consumer消费。
* 一个consumer group里的一个consumer都能消费多个partition,但是同组的其他consumer不能同时消费一个partition。
* 如果一个consumer group订阅了一个topic,那么此topic下的所有partition都必须被此组消费?
* 一个consumer group里consumer数量最好小于等于topic下的partition数量,否则会有consumer被闲置。

未完待续。