生产、消费、消息类别、存储等等。> Kafka服务:> Topic 主题,Kafka处理的消息的不同分类> Broker 消息代理,集群中的一个服务节点称为一个broker,存储消息数据到硬盘中,每个topic都是有分区的。> Partition Topic物理上的分组,一个topic在broker中被分为1个或者多个partition,分区在创建topic的时候指定> Message 消息,是通信的基本单位,每个消息都属于一个partition> Kafka服务相关> Producer:消息和数据的生产者,向Kafka的一个topic发布消息。> Consumer:消息和数据的消费者,定于topic并处理其发布的消息。> Zookeeper:协调kafka的正常运行。
Broker
配置文件server.properties
1、为了减少磁盘写入的次数, 消息暂时buffer起来, 再flush到磁盘, 这样减少了磁盘IO调用的次数
配置:Log Flush Policy
#log.flush.interval.messages=10000 一个分区的消息数阀值
#log.flush.interval.ms=1000
2、kafka的消息保存一定时间(通常为7天)后会被删除
配置:Log Retention Policy
log.retention.hours=168
#log.retention.bytes=1073741824
log.retention.check.interval.ms=300000
Producer
配置文件:producer.properties
1、自定义partition
Producer也根据用户设置的算法来根据消息的key来计算输入哪个partition:partitioner.class
2、异步或者同步发送
配置项:producer.type
异步或者同步发送
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据的通讯方式
3、批量发送可以很有效的提高发送效率
Kafka producer的异步发送模式允许进行批量发送,先将消息缓存在内存中,然后一次请求批量发送出去
具体配置queue.buffering.max.ms、queue.buffering.max.messages 默认值分别为5000和10000
Consumer
配置文件:consumer.properties
1、每个consumer属于一个consumer group,可以指定组id。group.id
2、消费形式:
组内:组内的消费者消费同一份数据;同时只能有一个consumer消费一个Topic中的1个partition;一个consumer可以消费多个partitions中的消息。
所以,对于一个topic,同一个group中推荐不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。
组间:每个消费组消费相同的数据,互不影响
3、在一个consumer多个线程的情况下,一个线程相当于一个消费者。
例如:partition为3,一个consumer起了3个线程消费,另一个后来的consumer就无法消费。
(这是Kafka用来实现一个Topic消息的广播(发给所有的Consumer)和单播(发给某一个Consumer)的手段。
一个Topic可以对应多个Consumer Group。如果需要实现广播,只要每个Consumer有一个独立的Group就可以了。
要实现单播只要所有的Consumer在同一个Group里。用Consumer Group还可以将Consumer进行自由的分组而不需要多次发送消息到不同的Topic。)
topic、partition、message
1、每个partition在存储层面是append log文件。新消息都会被直接追加到log文件的尾部,每条消息在log文件中的位置称为offset(偏移量)
2、每条Message包含了以下三个属性:
1、offset 对应类型:long 此消息在一个partition中序号。可以认为offset是partition中Message的id
2、MessageSize 对应类型:int32 此消息的字节大小
3、data 是message的具体内容
3、越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力
4、总之:业务区分增加topic、数据量大增加partition
