赞
踩
主题(Topic)
kafka消息以topic为单位进行归类,逻辑概念
分区(Partition)
多副本机制(Replica):
同步状态
特殊偏移量
消息发送步骤
必要参数配置
bootstrap.servers
:设置kafka集群地址,并非需要所有broker地址,因为生产者会从给定的broker中获取其他broker信息key.serializer
、value.serializer
:转换字节数组到所需对象的序列化器,填写全限类名发送模式
拦截器
序列化
自定义序列化器:实现Serializer接口
分区器
消费步骤
必要的参数配置
bootstrap.servers
:集群broker地址清单group.id
:消费组名称key.deserializer、
value.deserializer`:反序列化器订阅主题和分区
消息消费
poll():返回的是所订阅的主题(分区)上的一组消息,可设定timeout参数来控制阻塞时间
位移提交
提交的offset为 lastConsumedOffset + 1,lastConsumedOffset:上一次poll拉取到的最后一条消息的offset
控制或关闭消费
pause()、resume():暂停和恢复某分区的消费
指定位移消费
再均衡
拦截器
实现ConsumerInterceptor接口,poll()返回之前,会调用onConsume()方法,提交完offset后会调用onCommit()方法
多线程实现
创建
分区副本的分配
使用kafka-topics.sh创建主题内部分配逻辑按机架信息划分两种策略:
当创建一个主题时,不管用什么方式,实质上是在zk的/broker/topics节点下创建与该主题对应的子节点并写入分区副本分配方案,并且在/config/topics节点下创建与该主题相关的子节点并写入主题配置信息。
查看
kafka-topics.sh脚本的 list、describe指令
修改
kafka-topics.sh脚本的 alter指令
配置管理
kafka-configs.sh脚本
删除
kafka-topics.sh脚本的 delete指令
KafkaAdminClient可实现以调用API的方式对Kafka进行管理。通过KafkaAdminClient创建主题可能不符合规范,可以在broker端设置create.topic.policy.class.name
来指定一个类验证主题创建时的合法性,这个类需要实现ClreateTopicPolicy接口,放入Kafka源码,并重新编译。
优先副本(preferred replica/preferred leader)
分区重分配
将某节点上的分区副本迁移至其他节点:宕机迁移失效副本、有计划下线节点迁移副本(注意:下线前最好先关闭或重启此broker,保证不是leader节点,减少了节点间流量复制)
向新增节点分配原有主题分区副本,集群中新增节点时,只有新创建的主题分区才有可能分配到新节点上,需要把老主体的分区分配到新节点上
可使用kafka-reassign-partitions.sh脚本
复制限流
数据复制会占用额外的资源,如果重分配的量太大必然会严重影响整体的性能。可以通过对副本间的复制流量加以限制来保证重分配期间整体服务不会受太大的影响,可分别限制follower副本复制速度和leader副本传输速度
通过kafka-config.sh或 kafka-reassign-partitions.sh配置
分区重分配过程中的临时限流策略
修改副本因子
通过kafka-reassign-partitions.sh配置
性能测试工具
分区数和吞吐量的关系
在一定限度内,吞吐量随分区数增加而上升,但由于磁盘、文件系统、I/O调度策略等影响,到一定程度时吞吐量会存在瓶颈或有所下降。
考量因素
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。