KAFKA-9447: Add new customized EOS model example#8031
KAFKA-9447: Add new customized EOS model example#8031guozhangwang merged 11 commits intoapache:trunkfrom
Conversation
| @@ -51,21 +51,18 @@ public Map<String, KafkaFuture<TopicDescription>> values() { | |||
| */ | |||
| @@ -48,23 +48,13 @@ public KafkaFuture<Map<String, TopicListing>> namesToListings() { | |||
| * Return a future which yields a collection of TopicListing objects. | |||
6bf8724 to
340747f
Compare
guozhangwang
left a comment
There was a problem hiding this comment.
LGTM overall, just some minor comments.
| if (this.mode.equals("groupMode")) { | ||
| producer.sendOffsetsToTransaction(positions, consumer.groupMetadata()); | ||
| } else { | ||
| producer.sendOffsetsToTransaction(positions, consumerGroupId); |
There was a problem hiding this comment.
Just to refresh my memory: are we going to eventually deprecate this API, or are we going to keep both, and let users apply this one with manual assignment (like you did here)? I thought we are going to deprecate, but maybe I remembered it wrong.
There was a problem hiding this comment.
No, we are intended to keep both
| throw new KafkaException("Encountered fatal error during processing: " + e.getMessage()); | ||
| } | ||
| } | ||
| messageRemaining.set(messagesRemaining(consumer)); |
There was a problem hiding this comment.
Why we need an atomic long here? Seems there's no concurrency.
There was a problem hiding this comment.
The tricky thing here is that if we define a primitive long outside of the rebalance callback, it won't compile.
|
|
||
| private ProducerRecord<Integer, String> transform(final ConsumerRecord<Integer, String> record) { | ||
| printWithTxnId("Transformed record (" + record.key() + "," + record.value() + ")"); | ||
| return new ProducerRecord<>(outputTopic, record.key() / 2, "Transformed_" + record.value()); |
There was a problem hiding this comment.
Why divide the key by two?
There was a problem hiding this comment.
It's just a way of showing the key gets processed by message copier, all the produced message key are even keys.
| messageProcessed += records.count(); | ||
| } catch (CommitFailedException e) { | ||
| // In case of a retriable exception, suggest aborting the ongoing transaction first for correctness. | ||
| producer.abortTransaction(); |
There was a problem hiding this comment.
prop: abortTransaction can also throw ProducerFenced.
There was a problem hiding this comment.
Yea, which is ok as we will throw on ProducerFenced anyway
There was a problem hiding this comment.
Not sure I understand: we try to capture ProducerFenced below and wrap it as a KafkaException, but here if we throw ProducerFenced it would not be captured and wrapped, is that intentional?
|
@abbccdda looks like |
|
@omkreddy Thanks for catching that! Will do a fix in a minute |
| try { | ||
| // Abort previous transaction if instructed. | ||
| if (abortPreviousTransaction) { | ||
| producer.abortTransaction(); |
There was a problem hiding this comment.
It's a bit unconventional to have abort logic at the start of the loop. I think what users would expect is something like this:
try {
producer.beginTransaction()
producer.send(...)
producer.sendOffsetsToTransaction(...)
producer.commitTransaction()
} catch (Exception ) {
producer.abortTransaction()
}Conflicts: * build.gradle: moved avro plugin definition below newly added test retry plugin. * apache-github/trunk: MINOR: further InternalTopologyBuilder cleanup (apache#8046) MINOR: Add timer for update limit offsets (apache#8047) HOTFIX: Fix spotsbug failure in Kafka examples (apache#8051) KAFKA-9447: Add new customized EOS model example (apache#8031) KAFKA-8164: Add support for retrying failed (apache#8019) HOTFIX: checkstyle for newly added unit test KAFKA-9261; Client should handle unavailable leader metadata (apache#7770) MINOR: Fix typos introduced in KIP-559 (apache#8042) MINOR: Fixing null handilg in ValueAndTimestampSerializer (apache#7679) KAFKA-9113: Clean up task management and state management (apache#7997) MINOR: fix checkstyle issue in ConsumerConfig.java (apache#8038) KAFKA-9491; Increment high watermark after full log truncation (apache#8037) KAFKA-9477 Document RoundRobinAssignor as an option for partition.assignment.strategy (apache#8007) KAFKA-9074: Correct Connect’s `Values.parseString` to properly parse a time and timestamp literal (apache#7568) KAFKA-9492; Ignore record errors in ProduceResponse for older versions (apache#8030)
With the improvement of 447, we are now offering developers a better experience on writing their customized EOS apps with group subscription, instead of manual assignments. With the demo, user should be able to get started more quickly on writing their own EOS app, and understand the processing logic much better. Reviewers: Guozhang Wang <wangguoz@gmail.com>
With the improvement of 447, we are now offering developers a better experience on writing their customized EOS apps with group subscription, instead of manual assignments. With the demo, user should be able to get started more quickly on writing their own EOS app, and understand the processing logic much better. Reviewers: Guozhang Wang <wangguoz@gmail.com>
…t-for-generated-requests * apache-github/trunk: (410 commits) KAFKA-8843: KIP-515: Zookeeper TLS support MINOR: Add missing quote for malformed line content (apache#8070) MINOR: Simplify KafkaProducerTest (apache#8044) KAFKA-9507; AdminClient should check for missing committed offsets (apache#8057) KAFKA-9519: Deprecate the --zookeeper flag in ConfigCommand (apache#8056) KAFKA-9509; Fixing flakiness of MirrorConnectorsIntegrationTest.testReplication (apache#8048) HOTFIX: Fix two test failures in JDK11 (apache#8063) DOCS - clarify transactionalID and idempotent behavior (apache#7821) MINOR: further InternalTopologyBuilder cleanup (apache#8046) MINOR: Add timer for update limit offsets (apache#8047) HOTFIX: Fix spotsbug failure in Kafka examples (apache#8051) KAFKA-9447: Add new customized EOS model example (apache#8031) KAFKA-8164: Add support for retrying failed (apache#8019) HOTFIX: checkstyle for newly added unit test KAFKA-9261; Client should handle unavailable leader metadata (apache#7770) MINOR: Fix typos introduced in KIP-559 (apache#8042) MINOR: Fixing null handilg in ValueAndTimestampSerializer (apache#7679) KAFKA-9113: Clean up task management and state management (apache#7997) MINOR: fix checkstyle issue in ConsumerConfig.java (apache#8038) KAFKA-9491; Increment high watermark after full log truncation (apache#8037) ...
With the improvement of 447, we are now offering developers a better experience on writing their customized EOS apps with group subscription, instead of manual assignments. With the demo, user should be able to get started more quickly on writing their own EOS app, and understand the processing logic much better.
Committer Checklist (excluded from commit message)