继续关于Kafka文档的阅读

This commit is contained in:
2023-02-21 09:54:35 +08:00
parent 9f8ee7e160
commit 949bad547e

View File

@@ -292,6 +292,12 @@ Kafka支持GZIPLZ4ZStandard压缩协议。
#### 异步发送 #### 异步发送
批量处理是提高性能的重要因素之一为了支持批量处理Kafka生产者会在内存中累计数据并在单个请求中发送更大的批数据。批处理可以被配置为累计不超过固定数量的消息或不超过特定界限的延迟例如64K10ms 批量处理是提高性能的重要因素之一为了支持批量处理Kafka生产者会在内存中累计数据并在单个请求中发送更大的批数据。批处理可以被配置为累计不超过固定数量的消息或不超过特定界限的延迟例如64K10ms
### 消费者 ### 消费者
Kafka消费者会向其消费分区的leader broker发送fetch请求。消费者在每次请求中指定log offset并从该位置接收一块log。consumer对于位置具有绝对的控制权故而在需要时可以执行rewind操作对数据进行重新消费。
#### push vs pull
在Kafka的实现中和大多数消息系统一样data从生产者push到broker消费者从broker中pull data。
#### consumer position
其他消息系统消费者通常使用ack来告知broker该消息已经被正确处理但是这样会存在如下问题如果被consumer拉取的消息被处理但是在发送ack之前消费者失败那么该消息会被重复消费。
相比于通过ack来保证消息被消费者正确处理kafka通过其他方式来对其进行处理。kafka topic由一系列分区组成在一个时间点每个分区都只会由一个consumer group中的一个消费者实例消费。每个消费者实例只需要维护一个integer作为ack确认的等价物维护position的开销相当小。
#### 静态成员 #### 静态成员
静态成员用于提升基于group rebalance协议应用的性能。rebalance协议依赖于组协调器组协调器用于为组成员分配实体id。组协调器产生的实体id是短暂的并且当成员重启并重新加入到组之后实体id会发生变化。对于基于consumer的app上述“动态成员”可能会造成在应用周期性重新启动时大量任务会被新分配给其他消费者实例。 静态成员用于提升基于group rebalance协议应用的性能。rebalance协议依赖于组协调器组协调器用于为组成员分配实体id。组协调器产生的实体id是短暂的并且当成员重启并重新加入到组之后实体id会发生变化。对于基于consumer的app上述“动态成员”可能会造成在应用周期性重新启动时大量任务会被新分配给其他消费者实例。
由于上述缺点Kafka group管理协议允许组成员提供持久的实体id基于这些id组成员身份保持不变故而rebalance不会被触发。 由于上述缺点Kafka group管理协议允许组成员提供持久的实体id基于这些id组成员身份保持不变故而rebalance不会被触发。
@@ -309,5 +315,4 @@ Kafka的语义是直截了当的当消息被发布时有一个消息被提
在0.11.0.0之前如果一个生产者没有接收到消息已经成功被提交的相应那么生产者会重新发送该消息。这种实现提供了at-least-once的语义如果前一次消息已经被写入到log中那么重新发送的重复消息仍会被重复写入到log中。 在0.11.0.0之前如果一个生产者没有接收到消息已经成功被提交的相应那么生产者会重新发送该消息。这种实现提供了at-least-once的语义如果前一次消息已经被写入到log中那么重新发送的重复消息仍会被重复写入到log中。
自从0.11.0.0开始kafka生产者还支持幂等传输选项幂等传输会保证消息的重复发送并不会导致log中存在重复条目。为了实现幂等传输broker会分配给每个生产者一个id并且通过和每条消息一起发送的序列号来判断去除重复消息。**同时从0.11.0.0开始生产者支持以类似事务的方式向多个topic分区发送多条消息要么所有的消息被成功写入要么所有的消息都未被写入。** 自从0.11.0.0开始kafka生产者还支持幂等传输选项幂等传输会保证消息的重复发送并不会导致log中存在重复条目。为了实现幂等传输broker会分配给每个生产者一个id并且通过和每条消息一起发送的序列号来判断去除重复消息。**同时从0.11.0.0开始生产者支持以类似事务的方式向多个topic分区发送多条消息要么所有的消息被成功写入要么所有的消息都未被写入。**
但是并非是所有的用例都需要如此严格的保证。对于延迟敏感的场景生产者可以指定其期望持久性级别。如果生产者指定其需要等待消息被提交那么可能会需要10ms但是生产者也可以指定异步发送消息或只需要等待到leader broker收到该信息followers不用收到 但是并非是所有的用例都需要如此严格的保证。对于延迟敏感的场景生产者可以指定其期望持久性级别。如果生产者指定其需要等待消息被提交那么可能会需要10ms但是生产者也可以指定异步发送消息或只需要等待到leader broker收到该信息followers不用收到