It all depends on the nature of the spout.

With a transactional spout, batches are always the same, even if replayed.

With an opaque spout, batches can change. But you have the guarantee that a 
tuple will only ever be processed successfully in a single batch. If a tuple 
fails in one batch, it could succeed in another.

-Taylor

> On May 6, 2014, at 8:19 PM, Ashok Gupta <[email protected]> wrote:
> 
> I think it can. That is where the coordinator comes in picture. Coordinator 
> defines the parameters of a batch and emitters do the job of emitting the sub 
> portions of batch.
> 
> 
> 
> 
> 
>> On Mon, May 5, 2014 at 12:50 PM, Abhishek Bhattacharjee 
>> <[email protected]> wrote:
>> Are you sure that a batch can consist of tuples from different partitions ?
>> I am just asking I am not sure , if it can then your question seems to be 
>> valid else it is not valid anymore :-) 
>> 
>> 
>>> On Fri, May 2, 2014 at 7:42 AM, Ashok Gupta <[email protected]> 
>>> wrote:
>>> 
>>> Hi, 
>>> 
>>> I have theoretical question about the guarantees 
>>> OpaqueKafkaTridentKafkaSpout provides. I would like to take an example to 
>>> illustrate the question I have.
>>> 
>>> Suppose a batch with txId 10 has tuple t1, t2, t3, t4 and they respectively 
>>> come from the kafka partition p1,p2,p3,p4. When this batch is played for 
>>> the very first time it failed processing however the commit happen for 
>>> tuples t3 in the database while it did not happen for the tuples t1,t2,t4. 
>>> Since the batch failed, it is expected that the metadata in the zookeeper 
>>> is not going to be updated i.e. it will not assume the offsets as committed 
>>> for p1,p2,p3,p4. It is expected that the batch will be replayed, however, 
>>> suppose before it gets replayed the kafka partition p3 goes down. What 
>>> happens now? I understand that another batch with same transaction id 
>>> containing t1, t2, t4 may be replayed, however since p3 is down, t3 won’t 
>>> be replayed again. Since t3 is not replayed again, even if the batch 
>>> succeeds on replay the offsets for the p3 don’t get updated in the 
>>> zookeeper. That is all fine as long fault tolerance and opaque behavior is 
>>> concerned. 
>>> 
>>> My concern is more around what happens when partition p3 is back up again 
>>> and the spout starts reading data from the last offset it committed 
>>> successfully. Since from partition p3, tuple t3 is again going to be read 
>>> and it is certainly going to be in a batch with some txId > 10 (say 19) it 
>>> is going to be applied in the state again. This apparently violates the 
>>> exactly once semantics. 
>>> 
>>> Is the concern genuine or am I missing something?
>>> 
>>> Regards
>>> -- 
>>> Ashok Gupta, 
>>> (+1) 361-522-2172
>>> San Jose, CA
>> 
>> 
>> 
>> -- 
>> Abhishek Bhattacharjee
>> Pune Institute of Computer Technology
> 
> 
> 
> -- 
> Ashok Gupta, 
> (+1) 361-522-2172
> San Jose, CA

Reply via email to