kafka知识点整理

producer

可根据不同的需求决定不同的kafka策略如实时低延迟高可靠或允许一定的丢失和延迟等。

可以实现自己的序列化规则但建议用通用的如json或apache avro。

fire and forget发送方式不关心是否成功到达,有retry机制,但部分数据有可能丢失。

同步发送,等待返回结果来知道发送是否成功。

异步发送,可在send方法中传入callback方法来实现异步发送后抛出异常的异常处理。

可以给分区设定固定的key或设为null,固定的key会分到固定的分区,key为null会使用哈希算法来均衡消息所发送到的分区,当发送的分区无效时会报错(后续讲解什么时候会使得分区无效)。

分区建议一开始建足够多的分区并永不添加,以防止新添加了分区后,原有的想加到相应分区的数据不再保证加入该分区,并且当数据量急剧攀升时可以从容的增加消费者来解决消费速度与数据的产生速度不匹配的问题。

consumer

消费者数量不要超过分区数量,否则超过的消费者将获取不到消息。

每个消费者group都会获取订阅的topic中的所有partition中的消息。

kafka拥有大量的消费者group或者单个的group中包含大量的消费者并不会影响它的性能。

一个消费者group增加或减少消费者(也有可能是某个消费者挂掉了)或者topic增加或减少partition时会触发消费者group的rebalance,但不受欢迎,因为在rebalance的时候这个group会停止消费。且当一个partition从一个consumer转移到另一个consumer的时候,这个consumer也会丢失它的current state。if it was caching any data, it will need to refresh its caches—slowing down the application until the consumer sets up its state again.

消费者通过发送心跳给这个group所订阅的topic所在的broker(一个broker理解为一台服务器,多个broker组成cluster,一个broker上可以有多个topic),这个broker作为group coordinator来保持他所分到的分区的ownership。

Coordinator一般指的是运行在broker上的group Coordinator,用于管理Consumer Group中各个成员,每个KafkaServer都有一个GroupCoordinator实例,管理多个消费者组,主要用于offset位移管理和Consumer Rebalance。

在如下条件下,partition要在consumer中重新分配:

  • 条件1:有新的consumer加入
  • 条件2:旧的consumer挂了
  • 条件3:coordinator挂了,集群选举出新的coordinator
  • 条件4:topic的partition新加
  • 条件5:consumer调用unsubscrible(),取消topic的订阅

第一个加入consumer group的消费者作为leader,将接收group coordinator发来的consumer list并负责分配分区的子集给每个consumer,然后将分配list发回给group coordinator,所以只有leader是唯一一个知道分配list的client,其余消费者只知道自己所分配的partition。

one consumer per thread.

offset的commit可以选择automatic commit ,指定每隔多久时间commit一次,但会导致一定时间内的offset的丢失而导致这个时间段内的数据重复消费,所以如果对重复消费禁止的话,可以采用每poll一次commit一次,可以同步或异步,异步可以加入callback函数来处理异常(以提升吞吐量)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值