一、kafka 简介:
kafka是一个分布式发布-订阅消息系统。其主要架构为:
- Kafka集群 (Broker):包含一个或多个服务器,服务器节点称为Broker。Broker储存topic数据,每个topic又可以包含多个partition,每个broker会储存该topic的一个partition
- 生产者 (Producer):将消息写入所选的topic中
- 消费者 (Consumer):一个consumer group里边多有consumer订阅相同的主题,每个消费者接收一部分分区的消息
二、可靠性保障
基本保障:
- 保障分区消息的顺序
- 只有当消息被写入到所有的同步副本时,这条消息才会被认为已提交
- 消费者只能读取已经提交的消息,无法读取只写入部分副本的消息
Broker可靠性:
- 复制系数 replication factor:可通过default.replication.factor配置,如果复制系数为N,那么在N-1个broker失效时,仍可以向该topic写入或读取数据
- 副本的分布:应该在不同的机架上,来满足某个机架不可用时的容灾
- 不完全的leader选举:通过unclean.leader.election配置。如果分区leader不可用时,一个同步副本会被选为新的leader。如果允许不同步的副本成为leader (默认参数为true),就需要承担丢失数据和数据不一致的风险。如果不允许他们成为leader(参数为false),就要接受可用性降低,等原leader副本恢复到可用状态
- 最少同步副本: min.insync.replicas 来设置
使用配置生产者
根据可靠性配置合适的acks值
acks参数制定了必须有多少分区副本收到消息,生产者才会确认消息是写入成功的
- acks = 0: 生产者将消息发送出去,就认为消息已经成功写入
- acks = 1: 消息发出后,leader分区将它写入内存,就返回确认。此方法可能存在数据丢失,比如leader写入成功,但是没有同步到fellow节点。如果此时leader挂了,或者消息还未刷新至磁盘
- acks = all:leader返回确认前,要等待所有同步副本都收到消息,才确认返回。
配置重试参数
retries 参数决定了生产者可以重发消息的次数。在充实过程中,消息会有一个主键,保证不会出现数据重复
当生产者写入消息遇到错误时:
- 可重试错误:比如leader不可用
- 不可重试错误: 比如配置错误
使用配置消费者
- group.id
- auto.offset.reset: 在没有偏移量可提交时,消费者从哪里督导数据,可以设置earlist或latest
- enable.auto.commit:自动提交偏移量
- auto.commit.interval.ms
网友评论