Apache kafka 卡夫卡流:提交不';不会发生
我是卡夫卡流的新手,我正在尝试卡夫卡流在超时情况下的行为 下面是我正在使用处理器API测试的场景:Apache kafka 卡夫卡流:提交不';不会发生,apache-kafka,apache-kafka-streams,stream-processing,Apache Kafka,Apache Kafka Streams,Stream Processing,我是卡夫卡流的新手,我正在尝试卡夫卡流在超时情况下的行为 下面是我正在使用处理器API测试的场景: 我的卡夫卡流媒体应用程序从卡夫卡主题(字符串键、字符串消息)消费并写入卡夫卡主题(字符串键、字符串消息) 我已将使用者配置参数max.poll.interval.ms设置为60000 ms 我的处理方法如下所示: public void process(String key, String value) { System.out.println("the key is : " +key)
- 我的卡夫卡流媒体应用程序从卡夫卡主题(字符串键、字符串消息)消费并写入卡夫卡主题(字符串键、字符串消息)
- 我已将使用者配置参数max.poll.interval.ms设置为60000 ms
- 我的处理方法如下所示:
public void process(String key, String value) { System.out.println("the key is : " +key); LocalDateTime start= LocalDateTime.now(); System.out.println("startTime:" + dtf.format(start)); if ( key.startsWith("12345678"){ Thread.sleep(80000); } System.out.println("done sleeping"); LocalDateTime end=LocalDateTime.now(); System.out.println("endTime:" + dtf.format(end)); System.out.println("Offset*****"+context.offset()+" partitionId****"+context.partition()+"taskId*****"+context.taskId()+ "javaThreadId*******"+ Thread.currentThread().getId()+ " value****"+value); }
- 所有其他配置都设置为默认值
- 如果处理时间超过max.poll.interval.ms,我将尝试查看应用程序的行为
- 我曾尝试显式调用context#commit(),但也不起作用。我错过了什么?卡夫卡流是否记得以前的处理状态?如果不是,为什么在第一次尝试20000毫秒后(mall.poll.interval.ms-60000,处理时间(睡眠)设置为80000毫秒)会显示“done sleep”
- 我的输入和输出主题各有2个分区,我已将StreamsConfig num.streams.threads配置为2
- 我有一个3节点的卡夫卡集群-卡夫卡和卡夫卡流版本1.1.0
- 我不使用标点法,也不使用任何复杂的处理方法
提前感谢。不是100%确定,但是请注意:如果调用
context#commit()
您只“请求”提交,Kafka Streams尝试尽快提交—但是在context#commit()
返回后,提交尚未发生
另外请注意,如果您的超时时间为60.000
,并且您睡眠时间为80.000
,则您的应用程序应退出消费者组,因此,不允许再提交。对于这种情况,日志中应该有一条警告日志消息
希望这有帮助