无锡网站建设价格费用,做生存分析的网站有哪些,网站开发源代码修改,wordpress多语言站点本章承接kafka一内容#xff0c;文章在本人博客主页都有#xff0c;可以自行点击浏览。
幂等性
请求执行多次#xff0c;但执行的结果是一致的。
如果#xff0c;某个系统是不具备幂等性的#xff0c;如果用户重复提交了某个表格#xff0c;就可能会造成不良影响。例如…本章承接kafka一内容文章在本人博客主页都有可以自行点击浏览。
幂等性
请求执行多次但执行的结果是一致的。
如果某个系统是不具备幂等性的如果用户重复提交了某个表格就可能会造成不良影响。例如用户在浏览器上点击了多次提交订单按钮会在后台生成多个一模一样的订单。
kafka幂等性
在生产者生产消息时如果出现retry时有可能会一条消息被发送了多次如果Kafka不具备幂等性的就有可能会在partition中保存多条一模一样的消息。
配置
props.put(enable.idempotence,true);
原理
为了实现生产者的幂等性Kafka引入了 Producer IDPID和 Sequence Number的概念。 PID每个Producer在初始化时都会分配一个唯一的PID这个PID对用户来说是透明的。 Sequence Number针对每个生产者对应PID发送到指定主题分区的消息都对应一个从0开始递增的Sequence Number。
如果同一个生产者发送的消息序列号一致了那么消息就已经存在了。
消费者组Rebalance机制
Rebalance再均衡
Kafka中的Rebalance称之为再均衡是Kafka中确保Consumer group下所有的consumer如何达成一致分配订阅的topic的每个分区的机制。
Rebalance触发的时机有
消费者组中consumer的个数发生变化。例如有新的consumer加入到消费者组或者是某个consumer停止了。订阅的topic个数发生变化。消费者可以订阅多个主题假设当前的消费者组订阅了三个主题但有一个主题突然被删除了此时也需要发生再均衡。订阅的topic分区数发生变化
坏处
发生Rebalance时consumer group下的所有consumer都会协调在一起共同参与Kafka使用分配策略尽可能达到最公平的分配Rebalance过程会对consumer group产生非常严重的影响Rebalance的过程中所有的消费者都将停止工作直到Rebalance完成
消费者分区分配策略
range范围分配
Range范围分配策略是Kafka默认的分配策略它可以确保每个消费者消费的分区数量是均衡的。
注意Rangle范围分配策略是针对每个Topic的。
轮询分配
RoundRobinAssignor轮询策略是将消费组内所有消费者以及消费者所订阅的所有topic的partition按照字典序排序topic和分区的hashcode进行排序然后通过轮询方式逐个将分区以此分配给每个消费者。
粘性分配
没有重新分配的时候和轮询一样当消费者挂掉的时候发生重新分配尽可能保留之前的分配不变将挂点的消费者上绑定的分区平均分配到没挂掉的消费者上面。由于rebalance发生导致消费者需要重新消费之前正在处理的分区导致不必要的系统开销。例如某个事务正在进行就必须要取消了
副本机制
副本的目的就是冗余备份当某个Broker上的分区数据丢失时依然可以保障数据可用。因为在其他的Broker上的副本是可用的。
producer的ACKs参数
对副本关系较大的就是producer配置的acks参数了,acks参数表示当生产者生产消息的时候写入到副本的要求严格程度。它决定了生产者如何在性能和可靠性之间做取舍。
确认机制说明acks0生产者在成功写入消息之前不会等待任何来自服务器的响应,消息有丢失的风险但是速度最快acks1默认值只要集群首领节点收到消息生产者就会收到一个来自服务器的成功响应acksall只有当所有参与赋值的节点全部收到消息时生产者才会收到一个来自服务器的成功响应
Kafka的数据存储形式 一个topic由多个分区组成 一个分区partition由多个segment段组成 一个segment段由多个文件组成log、index、timeindex Kafka配额限速机制Quotas
生产者和消费者以极高的速度生产/消费大量数据或产生请求从而占用broker上的全部资源造成网络IO饱和。有了配额Quotas就可以避免这些问题。Kafka支持配额管理从而可以对Producer和Consumer的producefetch操作进行流量限制防止个别业务压爆服务器。
限制producer端速率
为所有client id设置默认值以下为所有producer程序设置其TPS不超过1MB/s即1048576/s命令如下 bin/kafka-configs.sh --zookeeper node1.itcast.cn:2181 --alter --add-config producer_byte_rate1048576 --entity-type clients --entity-default
运行基准测试观察生产消息的速率 bin/kafka-producer-perf-test.sh --topic test --num-records 500000 --throughput -1 --record-size 1000 --producer-props bootstrap.serversnode1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks1
结果
50000 records sent, 1108.156028 records/sec (1.06 MB/sec)
限制consumer端速率
对consumer限速与producer类似只不过参数名不一样。
为指定的topic进行限速以下为所有consumer程序设置topic速率不超过1MB/s即1048576/s。命令如下 bin/kafka-configs.sh --zookeeper node1.itcast.cn:2181 --alter --add-config consumer_byte_rate1048576 --entity-type clients --entity-default
运行基准测试 bin/kafka-consumer-perf-test.sh --broker-list node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 --topic test --fetch-size 1048576 --messages 500000
结果为
MB.sec1.0743
取消Kafka的Quota配置
使用以下命令删除Kafka的Quota配置 bin/kafka-configs.sh --zookeeper node1.itcast.cn:2181 --alter --delete-config producer_byte_rate --entity-type clients --entity-default bin/kafka-configs.sh --zookeeper node1.itcast.cn:2181 --alter --delete-config consumer_byte_rate --entity-type clients --entity-default