AWS lambda documentation change
Summary
Added Java implementation example for Kafka batch handler with error processing
Security assessment
This adds programming language support documentation with example code. No security-related content or fixes are evident in this change.
Diff
diff --git a/lambda/latest/dg/kafka-retry-configurations.md b/lambda/latest/dg/kafka-retry-configurations.md index 71f56ff79..7721a6c7a 100644 --- a//lambda/latest/dg/kafka-retry-configurations.md +++ b//lambda/latest/dg/kafka-retry-configurations.md @@ -205,0 +206,54 @@ Here is a Node.js version: +Here is a Java version: + + + import com.amazonaws.services.lambda.runtime.Context; + import com.amazonaws.services.lambda.runtime.RequestHandler; + + import java.util.ArrayList; + import java.util.Base64; + import java.util.HashMap; + import java.util.List; + import java.util.Map; + + public class KafkaBatchHandler implements RequestHandler<Map<String, Object>, Map<String, Object>> { + + @SuppressWarnings("unchecked") + @Override + public Map<String, Object> handleRequest(Map<String, Object> event, Context context) { + List<Map<String, Object>> failures = new ArrayList<>(); + Map<String, List<Map<String, Object>>> records = + (Map<String, List<Map<String, Object>>>) event.getOrDefault("records", Map.of()); + + for (Map.Entry<String, List<Map<String, Object>>> entry : records.entrySet()) { + for (Map<String, Object> record : entry.getValue()) { + String topic = (String) record.get("topic"); + Object partition = record.get("partition"); + Object offset = record.get("offset"); + String valueBase64 = (String) record.get("value"); + + try { + String data = new String(Base64.getDecoder().decode(valueBase64), "UTF-8"); + processMessage(data); + } catch (Exception e) { + System.err.printf("Failed to process record topic=%s partition=%s offset=%s: %s%n", + topic, partition, offset, e.getMessage()); + Map<String, Object> itemIdentifier = new HashMap<>(); + itemIdentifier.put("partition", topic + "-" + partition); + itemIdentifier.put("offset", offset instanceof Number ? ((Number) offset).longValue() : null); + Map<String, Object> failure = new HashMap<>(); + failure.put("itemIdentifier", itemIdentifier); + failures.add(failure); + } + } + } + + Map<String, Object> response = new HashMap<>(); + response.put("batchItemFailures", failures); + return response; + } + + private void processMessage(String data) { + // Your business logic for a single message + } + } +