{"record":{"id":"680e196e87b95b96","repo":"apache/beam","slug":"consumerpollingtimeout-should-be-0","errorCode":null,"errorMessage":"consumerPollingTimeout should be > 0.","messagePattern":"consumerPollingTimeout should be > 0\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaIO.java","lineNumber":928,"sourceCode":"        if (config.startReadTime != null) {\n          builder.setStartReadTime(Instant.ofEpochMilli(config.startReadTime));\n        }\n\n        if (config.stopReadTime != null) {\n          builder.setStopReadTime(Instant.ofEpochMilli(config.stopReadTime));\n        }\n\n        if (config.dynamicReadPollIntervalSeconds != null) {\n          builder.setDynamicRead(true);\n          builder.setWatchTopicPartitionDuration(\n              Duration.standardSeconds(config.dynamicReadPollIntervalSeconds));\n        } else {\n          builder.setDynamicRead(false);\n        }\n\n        if (config.consumerPollingTimeout != null) {\n          if (config.consumerPollingTimeout <= 0) {\n            throw new IllegalArgumentException(\"consumerPollingTimeout should be > 0.\");\n          }\n          builder.setConsumerPollingTimeout(config.consumerPollingTimeout);\n        } else {\n          builder.setConsumerPollingTimeout(2L);\n        }\n\n        if (config.redistribute != null) {\n          builder.setRedistributed(config.redistribute);\n          if (config.redistributeNumKeys != null) {\n            builder.setRedistributeNumKeys((int) config.redistributeNumKeys);\n          }\n          if (config.allowDuplicates != null) {\n            builder.setAllowDuplicates(config.allowDuplicates);\n          }\n          if (config.redistribute\n              && (config.allowDuplicates == null || !config.allowDuplicates)\n              && config.offsetDeduplication != null) {\n            builder.setOffsetDeduplication(config.offsetDeduplication);","sourceCodeStart":910,"sourceCodeEnd":946,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaIO.java#L910-L946","documentation":"The consumerPollingTimeout external config must be a positive number of seconds. setupExternalBuilder rejects non-positive values with an IllegalArgumentException because a zero/negative poll timeout would break the consumer polling loop.","triggerScenarios":"Setting config.consumerPollingTimeout to 0 or a negative value in the external KafkaIO configuration before building the pipeline.","commonSituations":"Copy-pasted template values of 0; interpreting the option as milliseconds and passing tiny/negative values; defaulting code that sets 0 meaning 'unset'.","solutions":["Set consumerPollingTimeout to a positive value (seconds), e.g. 2.","Omit the field entirely so the default of 2L is used.","Clamp the value in your config pipeline: timeout = Math.max(1, timeout)."],"exampleFix":"// before\n{\"consumerPollingTimeout\": 0}\n// after\n{\"consumerPollingTimeout\": 2}","handlingStrategy":"validation","validationCode":"if (t != null && t <= 0) throw new IllegalArgumentException(\"timeout>0 required\");","typeGuard":null,"tryCatchPattern":"try { build(cfg); } catch (IllegalArgumentException e) { clamp(); }","preventionTips":["Clamp timeouts >= 1; omit for default 2s"],"tags":["kafka","configuration","validation","beam-io"],"backgroundTag":"value-out-of-range","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}