Kafka入门之consumer
offset存放在_consumer_offsets这个topic下
并且从0-49划分了50个分区:
consumer会在kafka集群的所有broker中选择一个broker作为consumer group的coordinator,用于实现组成员管理,消费分配方案制定以及提交位移等。
consumer提交位移的主要机制是通过向所属的coordinator发送位移提交请求来实现的。每个位移提交请求都会往_consumer_offsets对应分区上追加写入一条消息。
默认情况下,consumer是自动提交位移的,自动提交间隔是5秒,通过设置auto.commit.interval.ms参数可以控制自动提交的间隔.
参数:
bootstrap.servers:和producer一样多组逗号分隔,不管制定了几台机器,consumer启动后都能通过这些机器找到完整的broker列表,因此为该参数指定多台机器通常只是为了常规的failover使用。这样即使某一台broker挂掉了,consumer重启后依然能够通过该参数指定的其他broker连接kafka集群。
group.id:默认值空字符串,需显示指定,否则抛出invaildGroupIdException异常。
key.deserializer
value.deserializer
session.timeout.ms:非常重要的参数之一。
是consumer group检测组内成员发送崩溃的时间。假设设置5分钟,则当某个成员突然崩溃了,管理group的kafka组件coordinator有可能需要5分钟才能感知到这个崩溃。
另一重含义:consumer消息处理逻辑的最大时间--倘若consumer两次poll之间的间隔超过了该参数设置的阀值,那么coordinator就会认为这个consumer已经追不上组内其他成员的消费进度了。因此会将该consumer“踢出”组,改该consumer负责的分区也会被分配给其他consumer。
0.10.1.0版本拆分为 session.timeout.ms和max.poll.interval.ms,默认10秒。
max.poll.interval.ms:如上
auto.offset.reset:制定了无位移信息或者位移越界(即consumer要消费的消息的位移不再当前消息的日志合理区间范围)时,kafka的应对策略。earliest/latest/none
enable.auto.commit:该参数指定consumer是否自动提交位移
fetch.max.bytes:它指定了consumer端单次获取数据的最大子节数。
max.poll.records:默认500,控制单次poll调用返回的最大消息数。
heartbeat.interval.ms:当coordinate决定开启新一轮rebalance时,它会将这个决定以RWBALANCE_IN_PROGRESS异常的形式“塞进”consumer心跳请求的response中,这样其他成员拿到response后才能知道它需要重新加入group。这个过程越快越好,而这个参数就是用来做这件事情的。推荐设置一个比较低的值,让group下的其他consumer成员能够更快的感知新一轮rebalance开启了。
connections.max.idle.ms:kafka会定期的关闭空闲socket连接导致下一次consumer处理请求时需要重新创建连向broker的Socket连接。默认9分钟比较推荐设为-1,即不要关闭这些空闲连接