kafka入门到精通
kafka
一、kafka基础术语
1.1 Topic
主题,使用类别属性划分消息所属类,而划分消息的类称之为topic
1.2 Partition
分区,topic中的消息被分割为一个或多个partition,对应到系统上就是一个或多个目录,FIFO队列,能保证局部有序
注意:消费者和分区关系,一个consumer可以对应多个分区,但是一个分区只能对应一个consumer
即:
组内 consumer 与 partition 的关系 1:n
partition 与组内 consumer 的关系 1:1
1.3 Broker
每一个服务器节点称为一个broker
1.4 Offset
偏移量,每条消息都有一个当前partition下唯一的64字节的offset,相当于当前分区的第一条消息的偏移量
1.5 ISR
分区中的所有副本统称为AR(Assigned Repllicas),leader也是一个副本。所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas),AR=ISR+OSR
1.6 Producer
生产者。即消息的发布者,其会将某 topic 的消息发布到相应的 partition 中。
1.7 Consumer
消费者。可以从 broker 中读取消息。
一个消费者可以消费多个 topic 的消息。
一个消费者可以消费同一个 topic 中的多个 partition 消息。
一个 partition 允许多个无关消费者同时消费。
二、kafka实现Demo
2.1 Kafka Producer Config
2.2 Kafka Producer Listener
2.3 Kafka Producer
2.4 Kafka Consumer Config
configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootStrapServers);
configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
configProps.put(ConsumerConfig.GROUP_ID_CONFIG, "test");
configProps.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 2);
/*---------------------------额外配置------------------------------*/
// 自动提交偏移量
// 如果设置成true,偏移量由auto.commit.interval.ms控制自动提交的频率
// 如果设置成false,不需要定时的提交offset,可以自己控制offset,当消息认为已消费过了,这个时候再去提交它们的偏移量。
// 这个很有用的,当消费的消息结合了一些处理逻辑,这个消息就不应该认为是已经消费的,直到它完成了整个处理。
configProps.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
// 自动提交的频率
configProps.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
// Session超时设置
configProps.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "15000");
// 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
// latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)
// earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录
configProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
2.4 Kafka Consumer
--------------------------------------------------------------------补充说明------------------------------------------------------------------------------------
三、kafka参数详解
acks:
当值为-1时,消息在写入一个分区的leader partition后,这些消息还需要被另外所有这个分区的副本同步完成后,才算发送成功
当值为1时,消息在写入一个分区的leader partition后,leader接收完,就算发送成功
当值为0时,消息只要是发送出去了,就默认发送成功了
retries:
消息重发的次数
batch.size:
批次的大小默认是16K
buffer.memory:
缓冲区大小
max.request.size:
最大消息大小,默认是1048576字节
request.timeout.ms:
请求超时时间,默认是30秒