2017-09-13 1 views
1

Wenn ich viele mit "Kardinalität" in function Bindings auswähle, funktioniert es gut.EventHub Trigger zu Funktionen Kardinalität, wobei eine höhere Timeouts verursacht

{ 
    "bindings": [ 
    { 
     "type": "eventHubTrigger", 
     "name": "eventHubMessages", 
     "direction": "in", 
     "path": "sessions", 
     "connection": "connectionstring", 
     "cardinality": "many", 
     "consumerGroup": "group1" 
    } 
    ], 
    "disabled": false 
} 

wenn ich "Eins" in Funktionsbindungen auswähle, höhere Timeouts bekommen.

"cardinality": "one", 

Wenn ich Konsole sehen, konnte ich sehen, gibt es mehrere Funktionen gestartet,

2017-09-12T19:37:49.645 Function started (Id=f0ef1cd5-8331-448e-86c6-84c745bbab13) 
2017-09-12T19:37:49.956 Function started (Id=26629395-54b8-4f83-9852-b3d55307318b) 

Ist Mächtigkeit „viele“ Single-Threaded und „Eins“ wird immer parallel verarbeitet. Während ich kein Problem mit der parallelen Verarbeitung habe, bringt es höhere Timeouts. oder das ist ein Kernproblem mit Funktionen App?

Die gesamte "Funktion gestartet", konnte ich sehen, ist in der Nähe von 250. Ist Skalierbarkeit Manager Problem hier?

+0

Ich denke, "viele" sollte verwendet werden, wenn Sie mehrere Ereignisse in einem Funktionsaufruf verarbeiten möchten (d. H. Ein Array als Parameter akzeptieren) – Mikhail

+0

Mit dem Geschäftsprozess und Zeitbegrenzung für die Funktion ist auf 5 Minuten festgelegt. Ich möchte nicht, dass die Funktion teilweise erfolgreich ist und teilweise fehlschlägt. Wenn die Verarbeitung nacheinander die Runtime mit einer höheren Erfolgsrate und einer geringeren Fehlerrate durchführt, dann wäre das der richtige Weg. Diese Timeout-Probleme verursachen jedoch Schwierigkeiten bei der Verarbeitung einer nach dem anderen. – Kannaiyan

Antwort

0

Kardinalität 'eins' bedeutet, dass Sie einen Funktionsaufruf pro EventData-Nutzlast erhalten. 'Viele' bedeutet, dass Sie pro Aufruf eine ganze Charge EventData [] erhalten. Es gibt einige weitere Einzelheiten über die Wiki bei https://github.com/Azure/azure-webjobs-sdk/wiki/EventHub-support

Wenn über die Richtigkeit des Codes Argumentation, sollten Sie diese Funktion Anrufungen konnte parallel laufen und dass die Losgrößen zufällig sind (es sei denn, Sie sind sehr explizit zu konfigurieren, dass) . Eine einzelne Charge wird wahrscheinlich noch immer seriell laufen.

+0

Danke für die Notiz. Bist du sicher, dass es parallel läuft? Wenn dies der Fall ist, hat Azure Probleme mit der Skalierbarkeit von Funktionen/AdJobs. Es kann nicht mehr Instanzen hinzufügen, wenn die Ressource benötigt wird. Mein Coldstart für diese Funktion ist nicht zu hoch, das Erstellen neuer Instanzen sollte den Anrufer nicht länger belasten. – Kannaiyan

+0

@Kannaiyan, ich habe einige Follow-up-Fragen: 1) Welche Sprache verwenden Sie für Ihren Funktionscode? 2) Wie stellen Sie fest, dass Timeout stattfindet? Sehen Sie, dass die gleiche Nachricht erneut verarbeitet wird (d. H., Sie können erkennen, dass kein Checkpointing stattfindet)? Ich möchte überprüfen, dass dies kein Problem mit der Konsolenprotokollierung ist. –

+0

Ich habe meine Antwort aktualisiert, um zu verdeutlichen, dass sie * parallel laufen könnte (was aus Korrektheitsgründen wichtig ist). –

Verwandte Themen