kafka
2020-06-23 18:47:54 81 举报技术,将消息先写入系统的页缓存中,页缓存直接映射到磁盘文件
利用zk的强一致性特性,一个节点只能被一个客户端创建成功,创建成功的broker即为leader,即先到先得原则,
其他节点会监听watch /controller节点
可以用来实现消息广播,多个CG同时订阅一个topic
follower从leader复制
如果某个分区的Leader不可用,Kafka就会从ISR集合中选择一个副本作为新的Leader。
但是每个segment file 的消息数量并不一定相等,
Offset记录着下一条将要发送给Consumer的消息的序号。
Offset从语义上来看拥有两种:Current Offset和Committed Offset。
它仅仅在poll()方法中使用。例如,Consumer第一次调用poll()方法后收到了20条消息,那么Current Offset就被设置为20。
这样Consumer下一次调用poll()方法时,Kafka就知道应该从序号为21的消息开始读取。这样就能够保证每次Consumer poll消息时,
都能够收到不重复的消息。
而Committed Offset能够保证新的Consumer能够从正确的位置开始消费一个partition,从而避免重复消费。
latest:从最后的offset开始消费
none:直接抛出exception给consumer
因此会直接从第6条消息开始读取。此时完全依赖于Committed Offset机制,和auto.offset.reset配置完全无关。
此时Kafka中还没有这个Consumer相应的Offset信息,因此此时Kafka就会根据auto.offset.reset
配置来决定这个Consumer从何处开始消费消息。
bootstrap.servers | 主机,配置格式: host1:port1,host2:port2,.... 由于这些主机是用于初始化连接,以获得整个集群(集群是会动态变化的),因此这个配置清单不需要包含整个集群的服务器。(当然,为了避免单节点风险,这个清单最好配置多台主机)。 | high | ||
key.serializer | 关键字的序列化类,实现以下接口: org.apache.kafka.common.serialization.Serializer 接口。 | high | ||
value.serializer | 值的序列化类,实现以下接口: org.apache.kafka.common.serialization.Serializer 接口。 | high | ||
acks | 消息持久化级别配置,见详细介绍 | 1 | [all, -1, 0, 1] | high |
buffer.memory | Producer 用来缓冲等待被发送到服务器的记录的缓存。如果记录发送的速度比发送到服务器的速度快, | 32MB | [0,...] | high |
retries | 若设置大于0的值,则客户端会将发送失败的记录重新发送,尽管这些记录有可能是暂时性的错误。请注意,这种 | 0 | [0,...,2147483647] | high |
batch.size | producer会把发往同一分区的多条消息封装进一个batch中,当batch满了后,producer才会把消息发送出去 小的 | 16KB | [0,...] | medium |
linger.ms | producer | 0 | [0,...] | medium |
max.request.size | 请求的最大字节数。这个设置将限制 | 1MB | [0,...] | medium |
bootstrap.servers | 主机,配置格式: host1:port1,host2:port2,.... 由于这些主机是用于初始化连接,以获得整个集群(集群是会动态变化的),因此这个配置清单不需要包含整个集群的服务器。(当然,为了避免单节点风险,这个清单最好配置多台主机)。 | high | ||
key.serializer | 关键字的序列化类,实现以下接口: org.apache.kafka.common.serialization.Serializer 接口。 | high | ||
value.serializer | 值的序列化类,实现以下接口: org.apache.kafka.common.serialization.Serializer 接口。 | high | ||
fetch.min.bytes | 获取请求返回的最小数据量。如果没有足够的数据可用,请求将等待这么多数据累积后才响应请求。默认设置为1个字节意味着一旦有一个字节的数据可用,或者fetch请求等待数据到达的时间过长,fetch请求就会得到响应。将此值设置为大于1将导致服务器等待更大数量的数据累积,这可以稍微提高服务器的吞吐量,但代价是增加一些延迟。 | 1 | [0,...] | high |
group.id | 标识所属的消费者组的ID。如果consumer通过使用subscribe(topic)或基于kafka的偏移管理策略来使用组管理功能,则需要此属性。 | "" | high | |
heartbeat.interval.ms | 心跳用于确保消费者会话保持活动状态,并在新消费者加入或离开组时重新平衡。该值必须设置为低于session.timeout。,但一般应设置不高于该值的1/3。它可以调整甚至更低,以控制正常再平衡的预期时间。 | 3000 | high | |
max.partition.fetch.bytes | 限制Consumer每次发起fetch请求时,读取到的数据大小 | 1MB | [0,...] | high |
session.timeout.ms | Consumer | 10s | high | |
enable.auto.commit | 自动提交offset | true | medium | |
auto.commit.interval.ms | offset自动提交到Kafka的频率。 | 5s | low |